HomeLINUXshell脚本- 基本脚本

shell脚本- 基本脚本

内容纲要
多个命令一起运行,用分号隔离,长度不超过255;
井号(#)用过注释行,但第一行是个例外,#后面的惊叹号(!)会告诉shell用哪个shell来运行脚本;

显示消息echo(注意:sh内置的echo禁用选项)
  • 默认情况下,要输出的字符串直接放到命令后面;
  • 字符串内有单引号或双引号一种,用两一种划定起来;
  • 把文本字符串和命令输出显示在同一行中用-n选项;
  • -e选项启用反斜杠转义的解释,-E相反也是默认;

    环境变量:
  • set命令显示当前环境变量列表;
  • 可前加美元符号($)或${环境变量}来使用环境变量,要显示$用反斜线();
    注意:
    [root@localhost code]# echo "the cost of the item is $15"
    the cost of the item is 5
    脚本将$15中的$1当做一个变量尝试去显示(但并未定义),再显示数字5

    用户变量:
  • 用户变量可以是任何由字母,数字或下划线组成的文本字符串,长度不超过20个,区分大小写 ,区分大小写
  • 使用等号将值赋给变量,在变量,等号和值之间不能出现空格
     * 与环境变量一样,用户变量通过美元符号($)引用;

命令替换:
  • 反引号字符(`)或$(),用它们可以从命令输出中提取信息,并赋给变量;
    #!/bin/bash
    today=$(date +%Y%m%d)
    echo $today.log
    结果:20200226.log
    可用于脚本中日志文件命名方法

    命令替换会创建一个子shell来运行对应的命令。子shell( subshell)是由运行该脚本的shell 所创建出来的一个独立的子shell(child shell) 。正因如此,由该子shell所执行命令是无法 使用脚本中所创建的变量的。 在命令行提示符下使用路径 ./ 运行命令的话,也会创建出子shell;要是运行命令的时候 不加入路径,就不会创建子shell。如果你使用的是内建的shell命令,并不会涉及子shell。 在命令行提示符下运行脚本时一定要留心!


执行数学运算:
  • expr命令:较笨拙,且会有问题出现
    tonglei@MacBook-Pro-3:/home/wwwroot/shell$ expr 2 * 5
    expr: syntax error
    tonglei@MacBook-Pro-3:/home/wwwroot/shell$ expr 2 \* 5
    10
  • $[ operation ] 相对expr命令简单很多,且可直接识别 * 运算符,因为在方括号内;
  • bash shell数学运算符只支持整数运算。z shell(zsh)提供了完整的浮点数算术操作;
    tonglei@MacBook-Pro-3:/home/code/shell-demo$ echo $[100 / 45]
    2
  • 浮点运算最常见的方案是用内建的bash计算器bc来解决;
    variable=$(echo "options; expression" | bc)

    退出脚本:
  • 退出状态码:shell中运行的每个命令都使用退出状态码(exit status)告诉shell它已经运行完毕。退出状态 码是一个0~255的整数值,在命令结束运行时由命令传给shell。
状态码 描述
0 命令成功结束
1 一般性未知错误
2 不适合的shell命令
126 命令不可执行
127 没找到命令
128 无效的退出参数
128+x 与Linux信号x相关的严重错误
130 通过Ctrl+C终止的命令
255 正常范围之外的退出状态码
  • 用变量$?来保存上个已执行命令的退出状态码,对于需要进行检查的 命令,必须在其运行完毕后立刻查看或使用$?变量;

  • exit命令: 允许你在脚本结束时指定一 个退出状态码。

退出状态码被缩减到了0~255的区间。shell通过模运算得到这个结果。一个值的模就是被除 后的余数。最终的结果是指定的数值除以256后得到的余数。在这个例子中,指定的值是300(返 回值),余数是44,因此这个余数就成了最后的状态退出码。

tonglei@MacBook-Pro-3:/home/code/shell-demo$ cat basic.sh
#!/bin/bash
exit 300
tonglei@MacBook-Pro-3:/home/code/shell-demo$ bash basic.sh
tonglei@MacBook-Pro-3:/home/code/shell-demo$ echo $?
44

参考资料: 《Linux命令行与shell脚本编程大全》2,3版
查看代码

[转载请注明出处:
斜杠猿:http://www.80soho.com/?p=949]

打赏
发表评论

电子邮件地址不会被公开。