1,比较运算符
运算符 描述 示例
文件比较运算符
-e filename 如果 filename 存在,则为真 [ -e /var/log/syslog ]
-d filename 如果 filename 为目录,则为真 [ -d /tmp/mydir ]
-f filename 如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果 filename 为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果 filename 可读,则为真 [ -r /var/log/syslog ]
-w filename 如果 filename 可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果 filename 可执行,则为真 [ -L /usr/bin/grep ]
filename1 -nt filename2 如果 filename1 比 filename2 新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2 如果 filename1 比 filename2 旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符
(请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 如果 string 长度为零,则为真 [ -z "$myvar" ]
-n string 如果 string 长度非零,则为真 [ -n "$myvar" ]
string1 = string2 如果 string1 与 string2 相同,则为真 [ "$myvar" = "one two three" ]
string1 != string2 如果 string1 与 string2 不同,则为真 [ "$myvar" != "one two three" ]
算术比较运算符
num1 -eq num2 等于 [ 3 -eq $mynum ]
num1 -ne num2 不等于 [ 3 -ne $mynum ]
num1 -lt num2 小于 [ 3 -lt $mynum ]
num1 -le num2 小于或等于 [ 3 -le $mynum ]
num1 -gt num2 大于 [ 3 -gt $mynum ]
num1 -ge num2 大于或等于 [ 3 -ge $mynum ]
使用例子:test.sh
#两个数字直接比较,format : if
space [
space "num1"
space -lt
space "num2"
space]//注意这几个space
if [ "22" -lt "33" ]
then
echo "22 less than 33"
else
echo "no"
fi
a=11
b=13
#让变量加一
let a=a+1
echo "a="$a
#比较变量的值,也要注意空格
if [ $a -lt $b ]
then
echo "a<b"
else
echo "a>b"
fi
#[[ ]] 代替[ ] 也是要注意空格问题
if [[ $a -lt $b ]]
then
echo "a<b--"
else
echo "a>b--"
fi
#上面的比较都是用-lt/-gt...,这里用的是>,但是实验发现,只有右边为一个数字时,才可以,如果右边也是变量就会报错,具体原因不明,不知道与版本有无关系。。
if [ $a > 0 ]
then
echo "a>0"
fi
#另外一个中格式:(( )) ,好像( )不可以。。。
if(($a<=$b))
then
echo "(a<b)"
fi
tips:shell中两个变量比较时,尽量用[ ] or [[ ]] 注意空格
2,语句
1)if 语句
CODE:
if [ "22" -lt "33" ]注意空格
then
echo "22 less than 33"
else
echo "no"
fi
2)for 语句
for循环有几种方式:
1.for name [ in word ] ; do list ; done
2.for (( expr1 ; expr2 ; expr3 )) ; do list ; done//注意有2层括号
其中list简单说就是一串由操作符(operator ;、&、&&、||)分隔开的管道(pipeline)序列,详情参看man bash
各给出一个简单例子:
1.
for filename in `ls`
do
cat $filename
done
2.
for((i=0; i<10; i++))
do
echo $i
done
3)case 语句
CODE:
#!/bin/bash
echo "enter a number"
read ans
case $ans in
1)
echo "you numer is $ans"
;;
2)
echo "you number is 2"
;;
[3-9])
echo "you number is $ans"
esac
case语句
case语句要求shell将一个字符串S与一组字符串模式P1,P2,...,Pn比较,当S与
某个模式Pi想匹配时,就执行相应的那一部分程序/命令.shell的case语句中字符
模式里可以包含象*这样的通配符.
语法格式:
bash用法:
case string1 in
str1)
commands1;;
str2)
commands2;;
*)
commands3;;
esac
4)while 语句
语法格式:
while expression
do
statements
done
输出<10的基数
#!/bin/bash
i=1 while [ $i -lt 10 ] do echo $i >> newfile let i=i+2
done
|
3,其他
1)变量赋值
a=123
#读取从keyboar输入变量
read name
b=$(ls /home) 把命令的执行结果赋值给变量
2).
使用变量(前面用$)
echo $a
let a=a+1
3)
CODE:
$0 这个程序的执行名字
$n 这个程序的第n个参数值,n=1...9
$* 这个程序的所有参数
$# 这个程序的参数个数
$$ 这个程序的PID
$! 执行上一个背景指令的PID
$? 上一个指令的返回值