9. echo 命令
• 使用 echo 命令可以显示文本或变量的值
• echo [选项] [字符,变量...]
• 选项
-n 不换行输出,默认echo一次换一行,用在持续的打印输出
-e 启用转义字符解析
a 响铃 b 退格 c 去除尾部的新行
n 新的一行 r 回车 t 水平制表符功能
斜杠
echo -e "An apple a day keeps away attdoctorn"
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
27. if语句的直接使用示例
• if 语句可以直接使用Shell指令,再根据 $? 结果判断
DIR=/var/test
if cd $DIR &> /dev/null; then #直接丢弃错误信息
echo "now in $DIR"
else
echo "Can't change to $DIR"
fi
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
28. if语句嵌套
• 一步一步测试时,可能需要 if-then-else语句的嵌套使用
OSCH=0
echo "1. Unix (IBM AIX)"
echo "2. Linux (Red Hat Enterprise Linux)"
read OSCH
if [ $OSCH -eq 1 ]; then
echo "You pick UNIX OS"
else
if [ $OSCH -eq 2 ]; then
echo "You pick Linux OS"
else
echo "What you don't Like Linux/Unix OS"
fi
fi
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
32. for loop
• 语法:
for 变量名 in 列表
do
循环体
done
• 列表就是一个集合,集合由空格间隔,可以是以下的几种:
– 数字/字符集合
• 12579
• {1..254}
– 文件集合
• /etc/*.conf
– 指令结果集合
• $( find /etc/ -perm -003 )
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
33. for loop实例二
• 数字集合
echo "#!/bin/bash" > /bin/setFilewall.sh
for IP in {1..254}
do
echo "iptables -I INPUT -s 192.168.0.$IP -p tcp -m
state --state NEW -j ACCEPT" >>
/bin/setFirewall.sh
done
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
34. for loop 实例二
for FILE in $(find /var/ -size +10M)
do
rm -f $FILE
logger "$FILE has been deleted"
echo -e "033[33m$FILE 033[0mhas been
deleted" >> /var/tmp/largefile.log
done
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
35. for 循环C语言格式
l 很多有过C编程基础的程序员在开始写SHELL程序的时候对
Bash程序有着很大的抱怨;
l 但是Bash 2.02以后添加了(( ... )),可以提供类似C语言的语法
l 在(( ... )) 中你不再需要对SHELL变量名的调用在其之前加$
(美元号)
① for (( i = 0; i <=5 ; i++ ))
do
echo "welcome $i times"
done
l 特别要注意的是此类的语法的逻辑和SHELL截然相反,0代表
FALSE,所有非0的值代表TRUE,不建议用在if-then语句中
if (( UID > 0 )); then ; echo "Welcome root"; fi
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
36. for loop循环嵌套一
for NUM1 in {1..9}
do
for NUM2 in {1..9}
do
RES = $(( NUM1 * NUM2 )) #注意此处没有调用$
echo " $NUM1 * $NUM2 = $RES"
done
done
#请把此代码改成C语言格式
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
37. for loop循环嵌套二
• 国际象棋棋盘的例子
for (( i = 1; i <= 9 ; i++ ))
do
for (( j = 1; j <= 9 ; j++))
do
tot=$(( i+j ))
tmp=$(( tot % 2 ))
if [ $tmp -eq 0 ];then
echo -e -n "033[47m " #白色块
else
echo -e -n "033[40m " #黑色块
fi
done
echo -e -n "033[40m"
echo #换行
done
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
38. while循环
• 语法:
– while [ 条件测试 ]
do
命令
done
• 注意要修改测试条件的值,防止死循环。还可以与
if-then-fi嵌套使用,使用exit函数退出
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
39. while菜单示例
CHOOSE=0
while [[ $CHOOSE != "Q" && $CHOOSE != "q" ]]
do
if (( CHOOSE !="0" )); then
echo -e "Please input 033[33mq033[0m to quit"
sleep 4
fi
clear
echo "1. Linux"
echo "2. Unix"
echo "Q. Quit"
read CHOOSE
echo "Please Input 033[33mq033[0m to quit"
done
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
56. diglog工具实现确认框
• dialog --title "Linux Dialog Utility Msgbox" --backtitle "Linux Shell
• Script Tutorial" --msgbox "This is dialog box called msgbox, which
is used to show some information on screen which has also Ok
button, Thanks to Savio Lam and Stuart Herbert to give us this
utility. Press any key. . . " 9 50
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710
67. getopts示例
::
while getopts n a opt #此程序就有-n 和
-a 选项,注意选项字串尾部的冒号(:)
do
case "$opt" in
n) name="$OPTARG";;
a) age="$OPTARG";;
?) echo "Usage: ..."
esac
done
echo "Welcome $name , you age is $age"
指导老师:杨坤 QQ: 12238747
蓝狐教育系统培训中心 0731-84125710