条件测试1
test测试操作
语法: test 选项 参数
查阅帮助:help test
字符串比较
- 是否为空 [ -z 字符串 ]
- 等于[ 字符串1 == 字符串2 ]
- 不等于[ 字符串1 != 字符串2 ]
[ -z "$ss" ]
echo $?
x="HELLO"
[ -z "$x" ]
echo $?
[ root == root ]
echo $?
整数值比较
操作符 | 含义 |
---|
-eq | equal |
-ne | not equal |
-ge | greater or equal |
-le | less or equal |
-gt | greater than |
-lt | less than |
[ 3 -eq 2 ]
echo $?
文件状态测试
操作符 | 含义 |
---|
-e | 判断对象是否存在,真为0 |
-d | 判断对象是否是目录 |
-f | 判断对象是否是文件 |
-r | 判断对象是否可读 |
-w | 判断对象是否可写 |
-x | 判断对象是否可执行 |
条件测试2
组合多个命令
[ a == a ] && echo Y || echo N
[ a == b ] && echo Y || echo N
local_time=$(date +"%Y-%m-%d %H:%M:%S")
local_ip=$(ifconfig ens33|grep netmask|tr -s " "|cut -d" " -f3)
free_mem=$(cat /proc/meminfo|grep Avai |tr -s " "|cut -d" " -f2)
free_disk=$(df|grep /$|tr -s " "|cut -d" " -f4)
cpu_load=$(cat /proc/loadavg|cut -d" " -f3)
login_user=$(who |wc -l)
process_num=$(ps aux|wc -l)
[ $free_mem -lt 1048576 ] &&
echo "$local_time Free memory not enough.
Free_mem:$free_mem on $local_ip"|
mail -s Warning qishuhua@peakinfo.cn
[ $free_disk -lt 10485760 ] &&
echo "$local_time Free disk not enough.
Free_mem:$free_disk on $local_ip"|
mail -s Warning qishuhua@peakinfo.cn
result=$(echo "$cpu_load >4" |bc)
[ $result -eq 1 ]&&
echo "&local_time CPU load tp high
CPU 15 averageload:$cpu_load on $local_ip"|
mail -s Warning qishuhua@peakinfo.cn
[ $login_user -gt 0 ] &&echo " $local_time Too many user.
$login_user users login to $local_ip"|
mail -s Warning qishuhua@pakinfo.cn
if语句
if单分支语法
if condition
then
command1
command2
...
commandN
fi
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
#!/bin/bash
read -p "请输入用户名:" user
read -p "请输入密码:" pass
if [ ! -z "$user" ]&&[ ! -z "&pass" ];then
echo $user $pass
fi
if双分支语法
if condition
then
command1
else
command2
fi
#!/bin/bash
if [ -z "$1" ];then
echo -n "用法:脚本"
echo -e "\033[32m域名或ip\033[0m"
exit
fi
ping -c2 -i0.1 -w1 $1 &>/dev/null
if [ $? -eq 0 ];then
echo "$1 is up"
else
echo "$1 is down"
fi
if多分支语法
if condition;then
command1
elif condition;then
command1
else
command2
fi
#!/bin/bash
clear
num=$[RANDOM%10+1]
read -p "请输入1-10的数:" guess
if [ &guess -eq $num ];then
echo "猜对了"
elif [ &guess -lt $num ];then
echo "猜小了"
else
echo "猜大了"
fi
for循环
for语法
for 变量 in 值列表
do
done
for((初值;条件;步长))
do
done
for i in 1 2 3 4
do
echo $i
done
for i in {1..10}
do
echo $i
done
for((i=1;i<=5;i++))
do
echo $i
done
for((i=1;i<10;i++))
do
for((j=1;j<=i;j++))
do
echo -n "$i*$j=$[i*j] "
done
echo
done
while循环
while语法
while 条件
do
done
i=1
while [ $i -le 5 ]
do
echo $i
let i++
done
i=1
while :
do
echo $i
let i++
if [ $i -eq 10 ];then
exit
fi
done
case 语句
i=1
case i in
1)
echo 1;;
2)
echo 2;;
*)
echo *;;
esac
read -p "are you sure?[y/n]:" sure
case $sure in
y|Y|YES|yes)
echo "yes";;
n|N|NO|no)
echo "no";;
*)
echo "error"
esac
中断与退出
for i in {1..5}
do
[ $i -eq 3 ] && continue
echo $i
done
echo over
网卡监听
while :
do
clear
echo "本地网卡ens33流量:"
ifconfig ens33|grep "RX pack"|tr -s " "|cut -d " " -f6
ifconfig ens33|grep "TX pack"|tr -s " "|cut -d " " -f6
sleep 1
done
闰年
for i in {1..5000}
do
if [[ $[i%4] -eq 0 && $[i%100] -ne 0 || $[i%400] -eq 0 ]];then
echo "$i :闰年"
else
echo "$i:非闰年"
fi
done