1.shell条件测试
- shell条件测试一共就三种:文件测试,数值比较,字符串比较
- test -d /home 和[ -d /home]是一样的,注意命令和选项之间要加空格,[ 是个命令
- 条件测试的用法如下:
格式1:test 条件表达式
格式2(推荐使用):[ 条件表达式 ],单个当括号不支持正则
格式3:[[ 条件表达式 ]]
test的具体用法:man test
(1)文件测试eg
back_dir=/var
if ! test -d $back_dir;then
mkdir -p $back_dir
fi
执行:bash -vx test.sh
----------------------------------------------------------------------------------
back_dir=/var
if [! -d $back_dir ];then
mkdir -p $back_dir
fi
----------------------------------------------------------------------------------
(2)数值比较eg
if [ $UID -ne 0 ];then
echo "no 权限!"
exit
fi
yum -y install httpd
----------------------------------------------------------------------------------
(3)字符串比较
if [ $USER != "root" ];then
echo "no 权限!"
exit
fi
yum -y install httpd
2.文件测试
[-e dir|file]
[-d dir]
[-f file] 是否存在,而且是文件?
[-r file] 当前用户对该文件是否有读权限(除了root用户)
[-x file]
[-w file]
[-L file] 是链接文件吗?
[-b file] 是设备文件?
[-c file] 是字符设备吗?
eg:
[ ! -d/cc] && mkdir /ccc
[-d /ccc] || mkdir /ccc
grep 'cat $1' *
test -d /home
echo $?
0
test -d /home1111
echo $?
1
3.数值比较
[ 整数1 操作符 整数2 ]
[1 -gt 10 ] 大于
[1 -lt 10 ] 小于
[1 -eq 10 ] 等于
[1 -ne 10 ] 不等于
[1 -ge 10 ] 大于等于
[1 -le 10 ] 小于等于
((1<2));echo $?
((1==2));echo $?
((1>2));echo $?
((1>=2));echo $?
((1<=2));echo $?
((1!=2));echo $?
((`id -u` >0));echo $?
(($UID==0));echo $?
read -p "Please input a name :" user
if id $user &>/dev/null;then
echo "user $user exits"
else
useradd $user
if [$? -eq 0 ];then
echo "user $user is created"
fi
fi
disk_use=`df -Th|grep '/$'|awk '{print ${(NF-1)}'|awk -F "%" '{print $1}'`
maile=alice
if [ $disk_use -ge 90 ];then
echo "`data +%F-%H` disk: ${disk_use}%"|mail -s "disk war..." $mail_user
fi
(1)调试执行:bash -vx disk.sh
(2)每隔5分钟执行一下脚本(计划任务):crontab -e,然后填写:
*/5 * * * * /bin/bash shell的绝对路径
(3)bash -n XXX.sh 检查shell脚本语法
mem_used=`free -m|grep `^Mem:`|awk '{print $3}'`
mem_total=`free -m|grep '^Mem:'|awk '{print $2}'`
mem_percent=$((mem_used*100/mem_total))
war_file=/tmp/mem_war.txt
rm -rf $war_file
if [ $mem_percent -ge 80 ];then
echo "`date +%F-%H` memory:${mem_percent}%" > $war_file
fi
if [ -f $war_file ];then
mail -s "mem war..." alice <$war_file
rm -rf $war_file
fi
4.字符串比较
["$USER"=="root"];echo $?
0
BBB=""
echo ${
0
[-z "$BBB"] 字符串长度是0
echo $?
[-n "$BBB"] 字符串长度不是0
echo $?
1
[ 1 -lt 5 -a 5 -gt 10 ];echo $?
1
[ 1 -lt -o 5 -gt 10 ];echo $?
0
[[ 1 -lt 5 && 5 -gt 10 ]];echo $?
1
[[ 1 -lt || 5 -gt 10 ]];echo $?
0
read -p "Please input number: " num
read -p "Please input prefix: " prefix
for i in `seq $num`
do
user=$prefix$i
useradd $user
echo "123"|passwd --stdin $user &>/dev/null
if [ $? -eq 0 ];then
echo "$user is created"
fi
done
bash -n use.sh
==================================================================================
read -p "Please input number: " num
if [[ ! $num =~ ^[0-9]+$]];then
echo "no number"
exit
fi
read -p "Please input prefix: " prefix
if [-z "$prefix"];then
echo "error prefix"
exit
fi
for i in `seq $num`
do
user=$prefix$i
useradd $user
echo "123"|passwd --stdin $user &>/dev/null
if [ $? -eq 0 ];then
echo "$user is created"
fi
done