参考
基础语法
数字比较 -lt -eq -gt
[ `ps -ef|grep nginx|grep -v grep|wc -l` -eq 0 ]
str比较 == !=
[ $USER == "root" ]
-z 变量未定义或为空串都会命中-z
[ -z $1 ]
数字运算
- 整数
echo $((1+2)) # 不能计算小数
echo "1+2"|bc
- 小数
echo "1.2+2.3"|bc
- 文件检测
-f [ -f /etc/fstab ] && echo 'xx'
-d
-e
-rwx
$? $#
$0 $1 $2
$?
0 正常
1 失败
- if
if then
fi
if ;then
elif ;then
fi
if [ $age -gt 100 ];then
echo "age gt 100"
elif [ $age -gt 50 ];then
echo "get gt 50"
fi
- for
for i in `cat `;do
done
注: for对横排空格分隔 和 一行一个item都支持遍历
- 批量创建用户
for user in `cat user_list.txt`;do
useradd $user > /dev/null 2>&1
if [ $? -eq 0 ];then
echo "created user $user succ"
else
echo "created user $user faild"
fi
done
- 批量ping
for ip in `cat ip_list.txt`;do
ping -i 0.2 -c 3 -W 2 $ip > /dev/null 2>&1
if [ $? -eq 0 ];then
echo "host $ip online"
else
echo "host $ip offline"
fi
done
- while(好处是支持死循环)
while :;do
read -p '输入新运数字: ' num
if [ -z $num ];then
continue
fi
if [ $num -gt 100 ];then
echo "succ"
else
echo "faild"
fi
done
- case分支, 好处是支持正则
while :;do
read -p "请输入一个字符" char
case $char in
[a-z]|[A-Z])
echo "输出的值是字符"
;;
[0-9])
echo "输入的是数字"
;;
*)
echo "default running"
esac
done
常用命令
find
grep
sed
awk
- cat命令
name="mm"
age=22
cat > file.txt <<EOF
name = $name
age = $age
EOF
> /dev/null 2>&1
文件描述符
0 stdin
1 stdout
2 stderr
- 生成序列
seq -s ' ' 10
echo {1..10}
ping命令
-i interval
-c count
-W timeout
正则
${name} # 引用变量
$(date +%F) # 表达式