Shell脚本编程学习入门是本文要介绍的内容,我们可以使用任意一种文字编辑器,比如gedit、kedit、emacs、vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行):
#!/bin/sh
...

注意:最好使用“!/bin/bash”而不是“!/bin/sh”,如果使用tc shell改为tcsh,其他类似。

符号#!用来告诉系统执行该sell脚本的程序,本例使用/bin/sh。编辑结束并保存后,如果要执行该shell脚本,必须先使其可执行:

chmod +x filename

此后在该shell脚本所在目录下,输入 ./filename 即可执行该shell脚本。

Shell里的一些特殊符号

a []

shell离得函数

如果你写过比较复杂的shell脚本,就会发现可能在几个地方使用了相同的代码,这时如果用上函数,会方便很多。函数的大致样子如下:

functionname()
{
# inside the body $1 is the first argument given to the function
# $2 the second ...
body
}

你需要在每个脚本的开始对函数进行声明。

下面是一个名为xtitlebar的shell脚本,它可以改变终端窗口的名称。这里使用了一个名为help的函数,该函数在shell脚本中使用了两次:

#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
cat << HELP
xtitlebar -- change the name of an xterm, gnome-terminal or kde konsole
USAGE: xtitlebar [-h] "string_for_titelbar"
OPTIONS: -h help text
EXAMPLE: xtitlebar "cvs"
HELP
exit 0
}
# in case of error or if -h is given we call the function help:
[ -z "$1" ] && help
[ "$1" = "-h" ] && help
# send the escape sequence to change the xterm titelbar:
echo -e "33]0;$107"
# 

在shell脚本中提供帮助是一种很好的编程习惯,可以方便其他用户(和自己)使用和理解脚本。

命令行参数

我们已经见过$* 和 $1, $2 ... $9 等特殊变量,这些特殊变量包含了用户从命令行输入的参数。迄今为止,我们仅仅了解了一些简单的命令行语法(比如一些强制性的参数和查看帮助的-h选项)。但是在编写更复杂的程序时,您可能会发现您需要更多的自定义的选项。通常的惯例是在所有可选的参数之前加一个减号,后面再加上参数值 (比如文件名)。

有好多方法可以实现对输入参数的分析,但是下面的使用case表达式的例子无疑是一个不错的方法。

#!/bin/shhelp()
{cat << HELPThis is a generic command line parser demo.USAGE EXAMPLE: cmdparser -l hello -f -- -somefile1 somefile2
HELPexit 0
}while [ -n "$1" ]; do
case $1 in-h) help;shift 1;; # function help is called-f) opt_f=1;shift 1;; # variable opt_f is set-l) opt_l=$2;shift 2;; # -l takes an argument -> shift by 2--) shift;break;; # end of options-*) echo "error: no such option $1. -h for help";exit 1;;*) break;;
esac
doneecho "opt_f is $opt_f"
echo "opt_l is $opt_l"
echo "first arg is $1"
echo "2nd arg is $2"

你可以这样运行该脚本:

cmdparser -l hello -f -- -somefile1 somefile2

返回结果如下:

opt_f is 1
opt_l is hello
first arg is -somefile1
2nd arg is somefile2

这个shell脚本是如何工作的呢?脚本首先在所有输入命令行参数中进行循环,将输入参数与case表达式进行比较,如果匹配则设置一个变量并且移除该参数。根据unix系统的惯例,首先输入的应该是包含减号的参数。

shell脚本示例

一般编程步骤

现在我们来讨论编写一个脚本的一般步骤。任何优秀的脚本都应该具有帮助和输入参数。写一个框架脚本(framework.sh),该shell脚本包含了大多数脚本需要的框架结构,是一个非常不错的主意。这样一来,当我们开始编写新脚本时,可以先执行如下命令:

cp framework.sh myscript

然后再插入自己的函数。

让我们来看看如下两个示例。

Shell编程基础(1)相关推荐

  1. Linux Shell编程基础

    linux系统下给命令指定别名alias命令用法: 在linux系统中如果命令太长又不符合用户的习惯,那么我们可以为它指定一个别名.虽然可以为命令建立"链接"解决长文件名的问题,但 ...

  2. 【⛔拒绝内卷,学会shell,走遍天下都不怕⛔】shell编程基础

    shell编程基础 shell简介 属性 shell是一个命令行解释器,建立了用户和操作系统之间的接口.当我们在命令行输入一个命令后,shell会对命令进行解释,调用相应的程序去执行.shell是一种 ...

  3. shell编程基础笔记

    第一部分shell编程基础 1shell简介 什么是shell 存取权限和安全 shell简单脚本 shell特性 1.1什么是shell shell是核心程序kernel之外的指令解析器,是一个程 ...

  4. 「Linux」Linux Shell 编程基础入门

    Linux Shell 编程基础入门 1. 变量 1.1 变量定义 1.2 使用变量 1.3 引号 1.4 将命令的结果赋值给变量 1.5 位置参数 1.6 特殊变量及其含义 2. 字符串 2.1 字 ...

  5. Shell编程基础常用代码1

    Shell编程 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Sp ...

  6. Shell编程基础---shell的结构、执行及变量

    2019独角兽企业重金招聘Python工程师标准>>> 本文索引: shell脚本介绍 shell脚本结构和执行 date命令用法 shell脚本中的变量 shell脚本介绍 she ...

  7. 第二课《shell 编程基础》

    编程语言分类: 编译型 解释型 编译型语言:c.c++.c# 解释型语言: 内置型:shell.perl源码并入了linux kernel,提供内核级单条语句的效率 外置型:python.java.j ...

  8. [Linux] 10. shell编程基础《updating》

    第一个shell脚本 shell 脚本通常是以#!起始的文本文件 Linux环境下的任何脚本文件都是以一个被称为 shebang 的特殊行作为起始的. 在这行中,字符 #! 被置于解释器路径之前./b ...

  9. Linux 脚本大师不是人人都可以达到的,但Shell编程基础还是有必要掌握的

      Linux Shell是一种基本功,由于怪异的语法加之较差的可读性,现在逐渐被Python等脚本代替.既然是基本功,那就需要掌握,毕竟学习 Shell 脚本的过程中,还是能了解到很多Linux系统 ...

  10. Linux后台开发系列之「06.Shell 编程基础

    程序员的工作台 版权声明:本文为 cdeveloper 原创文章,可以随意转载,但必须在明确位置注明出处! 本文摘要 本文主要介绍 Linux Shell 编程的基础知识,包含下面 8 个方面: Sh ...

最新文章

  1. 几条跟堆栈扯上关系的汇编指令
  2. If语句:你们到底想把我放到哪儿?
  3. php中复选框删除数据_ERP分析中如何自动删除休息阶段的脑电数据?
  4. 顺义教委携手华平共建视频图像综合管理平台
  5. 论文发表在什么期刊上_医学论文发表期刊论文范文
  6. 艾伟也谈项目管理,一种适用于真实世界BPM的协作方式
  7. 小熊的日记图文列表布局小程序模板
  8. vue基础入门-应用 组件实例
  9. python盒中取球_在Python中找到占据给定球的盒子的位置
  10. Dangling Javadoc comment
  11. 视频语音识别_视频语音识别体验_视频语音识别试用 - 云+社区 - 腾讯云
  12. redis php web管理,redis web界面管理工具 phpredisadmin
  13. 局域网内网关欺骗获取网站密码
  14. redis集群原理及三种模式详解
  15. 淘宝新店铺如何打造爆款
  16. 如何产生创业想法(3 个框架)
  17. linux usb设备重映射规则
  18. scrapy初始第一波——爬取伯乐在线所有文章
  19. plt作图时出现横坐标或者纵坐标乱序的解决方法
  20. 国外优秀 Flex 网站源码模板与实例

热门文章

  1. 使用Pytorch DataLoader快捷封装训练数据、测试数据的X与Y
  2. 特征筛选5——距离相关系数筛选特征(单变量筛选)
  3. pandas追加写入行、列
  4. c语言编程和PS,求高人剖析下这道C语言编程题(PS:越详细越好)
  5. C++输入输出流加速器,关闭同步流,ios::sync_with_stdio(false)和 cin.tie(0)
  6. laravel contains 的用法
  7. Oracle使用rman备份数据库时出现cannot reclaim的错误
  8. EntityFramework Core 学习笔记 —— 包含与排除类型
  9. 华为云服务产品之精华问题大集烩(四)
  10. STL vector 用法介绍