整数比较
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))
字符串比较
= 等于,如:if [ "$a" = "$b" ]
== 等于,如:if [ "$a" == "$b" ],与=等价
注意:==的功能在[[]]和[]中的行为是不同的,如下:
[[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true
[[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true
[ $a == z* ] # File globbing 和word splitting将会发生
[ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true
今天执行一个shell脚本,一直报错syntax error near unexpected token `elif'
看语法也一直看不出什么错误,那是git源码里面的脚本文件GIT-VERSION-GEN,不应该怀疑它的正确性
在网上找了找资料,问题得到解决,原因是
把该文件从windows上copy到ubuntu上时,里面的换行符之类的已经不是unix格式的了
所以要转换一下。
ubuntu上的格式转换命令跟red hat上的名字有点不同
dos2unix:在ubuntu上对应的命令是fromdos
unix2dos:在ubuntu上对应的命令是todos
while循环(可使用continue或者break语句)
#!/bin/bash
a=100
sum=0
while [ $a -gt 0 ]; do
sum=$(($sum + $a))
((a--))
done
echo $sum
for循环
#!/bin/bash
for var in A B C ; do
echo "var is $var"
done
sh -x strangescript
上述命令会执行该脚本,同时显示所有变量的值。
shell还有一个不执行脚本只检查语法的模式,命令如下:
sh -n your_script
这个命令会返回所有语法错误。