3. test
语句:变量测试语句,用于测试变量是否相等、是否为空、文件类型等。 # test 测试条件 测试范围:整数、字符串、文件 a) 整数测试 test
INT1 –eq INT2 测试整数是否相等(INT1 is equal to
INT2) test INT1 –ge INT2
测试INT1是否>=INT2 (INT1 is greater than or equal to INT2) test
INT1 –gt INT2 测试INT1是否>INT2(INT1 is greater than
INT2) test INT1 –le INT2 测试INT1是否= test INT1 –lt INT2 测试INT1是否 test INT1 –ne INT2 测试整数是否不相等(INT1 is not
equal to INT2) b) 字符串测试 test
STR1=STR2 测试字符串是否相等 test STR1!=STR2 测试字符串是否不相等
test STR1 测试字符串是否不为空 test –n
STR1 测试字符串是否不为空 test –z STR1
测试字符串是否为空 c) 文件测试 test –d FILE 指定文件是否目录 test
–f FILE 指定文件是否常规文件 test –x
FILE 指定文件是否可执行 test –r
FILE 指定文件是否可读 test –w FILE 指定文件是否可写 test
–a FILE 指定文件是否存在 test –s
FILE 文件的大小是否非0 d) 变量测试语句:一般不单独使用,一般做为if语句的测试条件,如 if
test –d $1
then … fi 说明:测试$1是否为目录 简化:变量测试语句可用[ ]进行简化,如test –d $1 等价于 [ -d $1
] e) 范例1:判断两个数的大小 代码:
#!/bin/sh
if [ $# -ne 2 ]; then # 判断此脚本参数的个数是否等于2
echo "Not enough parameters"
exit 0
fi
if [ $1 -eq $2 ]; then
echo "$1 equals $2"
elif [ $1 -lt $2 ]; then
echo "$1 littler than $2"
elif [ $1 -gt $2 ]; then
echo "$1 greater than $2"
fi
执行:
[root@linux example]# sh test 1 1
1 equals 1
[root@linux example]# sh test 1 2
1 littler than 2
[root@linux example]# sh test 2 1
2 greater
than 1
f) 范例2:测试apache是否启动
代码:
#!/bin/sh
# "if...else" usage
# Using this program to show your system's services.
echo "Now, the web services of this Linux system will be detect..."
echo
# Detect www service
web=`/usr/bin/pgrep httpd` # 查找httpd的PID
if [ "$web" != "" ] # 判断查找结果
then
echo "The Web service is running."
else
echo "The Web service is NOT running."
/etc/rc.d/init.d/httpd start # 启动Apache服务
fi
流程控制语句:用于控制shell程序的流程 4. exit语句:退出程序执行,并返回一个返回码,返回码为0表示正常退出,非0表示非正常退出。 语法:exit
0 5. if
语句 if...then...fi 范例:从新启动apache服务
#!/bin/sh
if [ -x /etc/rc.d/init.d/httpd ] # 等价于if [ test –x /etc/init.d/http
]
then
/etc/rc.d/init.d/httpd restart
fi
6. if...else
语句 语法: if 条件1
than 命令1 elif 条件2
then 命令2 else 命令3 fi 其他:多个条件的联合 -a:逻辑与,仅当两个条件都成立时,结果为真。 -o:逻辑或,两个条件只要有一个成立,结果为真。
范例:
#!/bin/sh
echo "please input a file name: "
read file_name # 获取文件名
if [ -d $file_name ] # 检测是否为目录
then
echo "$file_name is a directory"
elif [ -f $file_name ] # 是否为普通的文件
then
echo "$file_name is a common file"
elif [ -c $file_name -o -b $file_name ] # 是否为 设备或
then
echo "$file_name is a device file"
else
echo "$file_name is an unknown file" # 不知道
fi
7. for ... done
语句 语法: for 变量 in
名字表 do 命令列表 done 范例:
#!/bin/sh
for DAY in Sunday Monday Tuesday Wednesday Thursday Friday Saturday ABC #
一次匹配in后面的值
do
echo “The day is : $DAY”
done
8. select
语句 语法: select 变量 in
关键字 do command
1 … command
n … done 说明:select把关键字中的每一项做成类似表单,以交互的方式执行do和done之间的命令。 范例:
#!/bin/sh
# "select" Usage
echo "What is your favourite OS?"
select var in "Linux" "UNIX" "Windows" "Other" "Mac" # 选择的数赋给变量var
do
break
done
echo "You have selected
$var"
执行结果:
[root@linux example]# sh select # 类似表单的选择
What is your favourite OS?
1) Linux
2) UNIX
3) Windows
4) Other
5) Mac
#? 5
You have selected Mac
[root@linux example]#
9. case...esac
语句 语法: case 变量
in 字符串1)
命令列表1 ;; ... 字符串n)
命令列表n ;; esac 范例1:
#!/bin/sh
echo "*******************************"
echo "Please select your operation:"
echo " Press "C" to Copy"
echo " Press "D" to Delete"
echo " Press "B" to Backup"
echo "*******************************"
read op # 键盘获取字符
case $op in # $op 匹配下面的字符串,匹配成功执行其下的相应命令
C)
echo "your selection is Copy"
;;
D)
echo "your selection is Delete"
;;
B)
echo "your selection is Backup"
;;
*)
echo "invalide selection"
esac
执行结果:
[root@linux example]# sh case
*******************************
Please select your operation:
Press C to Copy
Press D to Delete
Press B to Backup
*******************************
D
your selection is Delete
[root@linux
example]#
范例2:select与case结合使用
#!/bin/bash
# "select" "case" Usage
echo "a is 5, b is 3. Please select you method: "
a=5
b=3
select var in "a+b" "a-b" "a*b" "a/b" # 从中选择方法赋给var
do
break
done
case $var in # 匹配字符串,执行相应的代码
"a+b") echo 'a+b='`expr $a "+" $b`;;
"a-b") echo 'a-b='`expr $a "-" $b`;;
"a*b") echo 'a*b='`expr $a "*" $b`;;
"a/b") echo 'a/b='`expr $a "/" $b`;;
*) echo "input error..."
esac
执行结果:
[root@linux example]# sh select.case
a is 5, b is 3. Please select you method:
1) a+b
2) a-b
3) a*b
4) a/b
#? 2 # 选择2的计算方法
a-b=2
[root@linux example]#
10. while
语句 语法: while
条件 do 命令 done 范例:
#!/bin/sh
num=1
while [ $num -le 10 ] # 判断$num 是否=<10
do
SUM=`expr $num \* $num` # 执行乘法
echo $SUM
num=`expr $num + 1`
done
11. until
语句 语法: until
条件 do
命令 done 说明:until类似while循环,不同的是until是条件返回值为假时才继续执行。 范例1:
#!/bin/sh
until [ -x /etc/inittab ] # 判断/etc/inittab是否为可执行文件,不是执行do里面的语句