一篇教会你写90%的shell脚本(入门小结)

2020-05-11 13:57:41王旭

多个嵌套使用时,从内向外执行

for file in s /etc 或 for file in $(ls /etc) 循环中使用
`dirname $0` 获取脚本文件所在的目录
path=$(cd `dirname $0`;pwd) : 获取脚本当前所在目录,并且执行cd命令到达该目录,使用pwd获取路径并赋值到path变量

算术运算

$[ ] : 加减乘除,不必添加空格 $(( )) :加减乘除等,不必添加空格

逻辑判断

[ ] : 中括号旁边和运算符两边必须添加空格 (可以使用,不推荐) [[ ]]:中括号旁边和运算符两边必须添加空格 (字符串验证时,推荐使用) (()) : 中括号旁边和运算符两边必须添加空格 (数字验证时,推荐使用) [[]] 和 (()) 分别是[ ]的针对数学比较表达式和字符串表达式的加强版。 使用[[ … ]]条件判断结构,而不是[ … ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不适用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。

[[ ]]中增加模式匹配特效;
(( ))不需要再将表达式里面的大小于符号转义,除了可以使用标准的数学运算符外,还增加了以下符号

输出

echo

仅用于字符串的输出,没有使用printf作为输出的移植性好,建议使用printf

printf

printf 不会像 echo 自动添加换行符,我们可以手动添加 n
无大括号,直接以空格分隔

格式:printf format-string [arguments...] 其中(format-string: 格式控制字符串、arguments: 参数列表)

案例:printf "%-10s %-8s %-4.2fn" 郭靖 男 66.1234

%s %c %d %f 都是格式替代符

d:Decimal 十进制整数 对应位置参数必须是十进制整数,否则报错! s:String 字符串 对应位置参数必须是字符串或者字符型 否则报错 c:Char 字符 对应位置参数必须是字符串或者字符型 否则报错 f:Float 浮点 对应位置参数必须是数字型 否则报错

%-10s : 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

%-4.2f :指格式化为小数,宽度为4个字符,其中.2指保留2位小数。

转义符:

a :警告字符,通常为ASCII的BEL字符 b :后退 c :抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略 f :换页(formfeed) n :换行 r :回车(Carriage return) t :水平制表符 v :垂直制表符 :一个字面上的反斜杠字符 ddd :表示1到3位数八进制值的字符。仅在格式字符串中有效 ddd :表示1到3位的八进制值字符