条件语句
IF 语句
格式1:
if [ ]; then
命令序列
else
命令序列
fi
格式2:
if [ ]; then
命令序列
elif 条件; then
命令序列
elif 条件; then
命令序列
else
命令序列
fi
case语句
格式1:
case $变量名称 in
模式1)
命令序列
;;
模式2)
命令序列
;;
*)
esac
格式二:
case $变量名称 in
模式1|模式2)
命令序列
;;
模式3|模式4)
命令序列
;;
模式5|模式6)
命令序列
;;
*)
esac
DATE = $(date + %a)
TIME = $(date +%Y%m%d)
case $DATE in
Wed|Fri)
tar -czf /usr/src/${TIME}_log_tar.gz /var/log/ &> /dev/null
;;
*)
echo "Today neither wed or fri "
esac
循环语句
循环语句当中有for、while、until、select等语句
For语句
格式1:
for 变量 in 值1 值2 .... 值N
do
命令序列
done
格式二:
for (( j=1;j<10;j++ ))
do
命令序列
done
Domain = gmail.com
for MAIL_U in tom jerry smith
do
mail -s "Log" $MAIL_U@$Domain < /var/log/message
done
While语句
whhile [条件]
do
命令序列
done
输出文件的每一行:
while rad -r line
do
echo $line
done < file
批量添加20个用户,用户名称为userN, N为1至20的数字
U_NUM=1
while [ $U_NUM -le 20 ]
do
useradd user${U_NUM}
U_NUM = $((U_NUM+1))
done
until语句
until [条件]
do
命令序列
done
批量删除用户
U_NUM=20
until [ $U_NUM -eq 0 ]
do
userdel user${U_NUM}
U_NUM = $((U_NUM-1))
done
Select语句
Select语句可以用来生成菜单项目,select循环与for循环格式相同
用select生成询问籍贯的提问菜单,并通过echo回显用户的选择项
echo “where are you from?”
select var in "Beijing" "Shanghai" "New York" "Chongqing"
do
break
done
echo "You are from $var "
控制语句
控制语句有shift、continue、break、exit
shell脚本默认会按顺序依次执行脚本中的命令,通过控制语句可以认为控制脚本的执行顺序与流程
shift控制
将位置参数左移一位,也就是执行一次shift命令后,$2将变为$1,依次类推,这样可以通过$1调用所有的命令参数
[root@centos6 ~] cat shift.sh
for i in $@
do
echo $1
shift
done
[root@centos6 ~] bash shift.sh hello the world
hello
the
world
continue用来在for、while、until循环中使当前循环中断,从而进入下一次循环体
break则被用来结束整个for、while、until循环语句的执行
exit可以用来结束脚本的运行
sleep 5 让脚本暂停5秒钟
for IP_SUFFIX in {1...254}
do
case $IP_SUFFIX in
10)
continue
;;
15)
break
esac
echo ${IP_SUFFIX}
done
sleep 5
exit
echo "The would't be printed content "
shell函数应用
把可能使用多次代码或语句写错函数,可以通过函数名称更高地重复利用它们
脚本比较复杂时,也可以将脚本划分为多个模块以简化脚本
函数需要先定义,后通过调用函数名称即可使用
语法格式1:
name () {
命令序列
}
语法格式2:
function name {
命令序列
}
[root@centos6 ~] cat test.sh
#!/bin/bash
HINT() {
read -p "Press Enter to continue:"
}
CPU_INFO ( ) {
echo
echo -e "\033[4;3]m Print the CPU info:\033[0m"
cat /proc/cpuinfo | awk 'BEGIN {FS=":"} /model name/ {print "CPU Model:"$2 }'
cat /proc/cpuinfo | awk 'BEGIN {FS=":"} /cpu MHz/ {print "CPU Speed:" $2"MHz" }'
grep -Eq 'svm|vmx' /proc/cpuinfo && echo "Virtualization: Support" || echo "Virtualzation:No support"
echo
}
Load_INFO() {
echo
echo -e "\033[4;31mPrint the system Load:\033[0m"
uptime | awk 'BEGIN {FS=":"} {print $5}' | awk ' BEGIN {FS=","} {print "Last 1 minutes system load:"$1"\n" "Last 5 minutes system load:"$2"\n" "Last 15 minutes system load:"$3 } '
echo
}
MEM_INFO() {
echo
echo -e "\033[4;31mPrint the Memory and Swap info:\033[0m"
free | grep buffers/cashe | awk ' {print "Mem free:"$4" bytes" }
free | grep Swap | awk ' { print "Swap free:"$4" Bytes" } '
echo
}
DISK_INFO() {
echo
echo -e "\033[4;31mPrint system disk space usage:\033[0m "
df -h
echo
}
while true
do
clear
echo "-------------------------------------------------------------"
echo "1. Display CPU info:"
echo "2. Display system load:"
echo "3. Display Mem and swap info:"
echo "4. Display filesystem mount info:"
echo "5. Exit Script:"
read -p "Please select an iterm(1-4):" U_SELECT
case $U_SELECT in
1)
CPU_INFO
HINT
;;
2)
LOAD_INFO
HINT
;;
3)
MEM_INFO
HINT
;;
4)
DISK_INFO
HINT
;;
5)
exit
;;
*)
read -p "Please Select 1-4,Press Enter to continue:"
esac
done
检查密码,如果用户三次输入密码均错误,则退出脚本
[root@centos6 ~] cat test.sh
#!/bin/bash
#Check User password,set the number can be retrying
NUM=3 #密码最多尝试次数
PASSWD=Jacob #初始密码
SUM=0 #计数器
WHILE true
do
read -p "Please input your password:" pass #读取用户输入
SUM=$((SUM+1)) #计数器加1
if [ $pass == $PASSWD ] ; then #判断密码是否正确
echo "Your Are Right, OK"
exit
elif [$SUM -lt 3 ] ; then
continue
else
exit
fi
done