shell脚本--语法篇
原创
©著作权归作者所有:来自51CTO博客作者追梦途中的原创作品,请联系作者获取转载授权,否则将追究法律责任
条件测试
1、条件测试test或[ ](测试条件是真是假)
例如:字符串比较 #!/bin/bash read data test "$data" == "hello" //注意等号两边有空格 或者 [ $data == "hello" ] echo $? //上一条命令的运行结果,成功为0,失败为1
例如:两数比较大小 #!/bin/bash data=200 [ $data -eq 100 ] echo $? [ $data -lt 100 ] echo $? [ $data -le 100 ] echo $? [ $data -gt 100 ] echo $? [ $data -ge 100 ] echo $?
例如:测试与、非逻辑运算
|
2、if/then/elif/else/fi
#!/bin/bash read data if [ "$data" -eq 100 ];then echo "100" elif [ "$data" -eq 200 ];then echo "200" else : // :为空命令,该命令不做任何事 fi
#!/bin/bash read data [ "$data" -eq 100 ] && { //成立执行花括号里面,否则执行括号外 echo "yes" exit 0 } echo "no"
#!/bin/bash read data [ "$data" -eq 100 ] || { //不成立执行花括号里面,否则执行括号外 echo "yes" exit 0 } echo "no"
|
3、case/esac
#!/bin/bash read val case "$val" in start | -s | -start | -START ) echo "start" ;; 'stop' ) echo "stop" ;; '*' ) echo "*" ;; esac
|
循环语句
1、for/do/done
写法一: #!/bin/bash //for i in {1..100} for i in {a..z} do echo "$i" done 运行结果: 打印a...z的字母
写法二: #!/bin/bash for(( i=0;i<=100;i++ )) do echo "$i" done 运行结果: 打印1...100的数字 |
2、while/do/done && until/do/done
求1~100 间的偶数的和 #!/bin/bash sum=0 ret=0 for i in {1..100} do let ret=i%2 if [ $ret -eq 0 ];then let sum+=i fi done echo $sum 运行结果:2550
|
3、shell脚本的调试方法
-n : 读一遍脚本中的命令但不执行,用于检查脚本中的语法错误 -v : 将执行的每一条命令和如果打印出来 -x : 提供跟踪执行信息,将执行过程打印出来
这些选项的使用方法: (1) 在命令行提供参数: bash -x ./test.sh (2) 在脚本开头提供参数:#!/bin/bash -x (3) 在脚本中用set命令启用或禁用 set-x 和 set+x分别表示启用执行过程和关闭执行过程
|
数组
bash不支持多维数组,只支持一维数组;只支持序列下标,不支持关联式下标
用shell编写进度条: #!/bin/bash i=0 str='' arr=('|' '/' '-' '\\') index=0 while [ $i -le 100 ] do let index=i%4 printf "[%-100s][%d%%][%c]\r" "$str" "$i" "${arr[$index]}" sleep 0.1 let i++ str+='#' done printf "\n" |