三种测试方法
[ expression ]【[空格expression空格],别忘了空格】
[[ expression ]]
test expression
整数测试
-gt,-lt,-eq,-ne,-ge,-le
INT1=11 INT2=22 [ $INT1 -eq $INT2 ]或[[ $INT1 -eq $INT2 ]]或test $INT1 -eq $INT2
执行结果和状态码的区别
if 条件,这个”条件”是0的时候代表成功,这个”条件”在”if”后面是个状态码。
只有使用上面的整数测试的条件的时候才用”[]”,如果测试成立返回的状态码是0
USERNAME=user1
1、 if grep “^$USERNAME>” /etc/passwd; then 【正确,grep返回的是个状态码】
2、 if [ grep “^$USERNAME>” /etc/passwd ]; then 【错误,只有使用上面的整数测试的条件的时候才用”[]”】
3、 if [
grep "^$USERNAME\>" /etc/passwd
-eq 0 ]; then 【错误,grep返回的是命令的执行结果,一行内容,根本不是状态码,在”if”后面才是状态码】4、 if [
grep "^$USERNAME\>" /etc/passwd | cut -d: -f3
-eq 0 ]; then 【如果$USERNAME的UID是0,该条件就成立,否则错误】5、 if
grep "^$USERNAME\>" /etc/passwd | cut -d: -f3
; then 【这个首先执行grep,如果$USERNAME的UID是0,if把0当作状态码,该条件就成立,否则也是错误的】
文件测试
-e FILE:测试文件是否存在
-d FILE:测试文件是否是目录
-f FILE:测试文件是否是普通文件
-r FILE:测试当前用户对该文件是否有读取的权限
-w
-x
[root@jiakang ~]# [ -d aaa ]
[root@jiakang ~]# echo $?
1
[root@jiakang ~]# [ -d a ]
[root@jiakang ~]# echo $?
0
定义脚本退出状态码
exit :退出脚本,停止脚本的执行【类似php的exit和die】
exit 8【定义退出状态码是8】
测试脚本是否有语法错误
bash -n 脚本
bash -x 脚本 :单步执行
[root@jiakang a]# cat testif.sh
#!/bin/bash
FILE=/etc/inittabs
if [ -e $FILE ];then
echo "OK"
else
echo "找不到文件"
f
[root@jiakang a]# bash -n testif.sh
testif.sh: line 8: syntax error: unexpected end of file
[root@jiakang a]# cat testif.sh
#!/bin/bash
FILE=/etc/inittabs
if [ -e $FILE ];then
echo "OK"
else
echo "找不到文件"
fi
[root@jiakang a]# bash -x testif.sh
+ FILE=/etc/inittabs
+ '[' -e /etc/inittabs ']'
+ echo $'\346\211\276\344\270\215\345\210\260\346\226\207\344\273\266'
找不到文件
[root@jiakang a]# echo $?
0【这个状态码是最后echo "找不到文件"返回的,echo输出的是最后一个命令的状态码】
字符串测试
==
!=
>
<
-n string :测定指定字符串是否为空,空则真,不空则假
-z string :测定指定字符串是否不空,不空则真,空则假
[ 字符串 == 字符串 ]【[空格 字符串 空格==空格 字符串 空格],注意==两侧都有空格】
[[ 字符串 == 字符串 ]]
[root@jiakang ~]# A="aaa"
[root@jiakang ~]# B="bbb"
[root@jiakang ~]# [ $A == $B ]
[root@jiakang ~]# echo $?
1
[root@jiakang ~]# [ $A != $B ]
[root@jiakang ~]# echo $?
0
for循环
用法:for 变量 in 列表; do 循环体 done
例如: for I in 1 2 3 4 5; do 加法运算 done
常用生成列表的方法
{1..100}
seq [起始数 [跳数]] 结束数
[root@jiakang ~]# seq 5
1
2
3
4
5
[root@jiakang ~]# seq 3 5
3
4
5
[root@jiakang ~]# seq 3 2 8
3
5
7
声明整数
let SUM
declare -i SUM
[root@jiakang a]# cat testfor.sh
#!/bin/bash
declare -i SUM=0
for I in `seq 1 2 100 ` ;do
let SUM=$[$SUM+$I]
done
echo "sum=$SUM"
[root@jiakang a]# ./testfor.sh
sum=2500
[root@jiakang a]# cat testfor.sh
#!/bin/bash
declare -i SUM=0
for I in {1..100};do
let SUM=$[$SUM+$I]
done
echo "sum=$SUM"
[root@jiakang a]# ./testfor.sh
sum=5050