for循环:遍历式循环
for 变量 in 列表;do
Statement1;
Statement2;
...
done
例子:写一个脚本,测试172.16.0.0/16网络内的所有主机是否在线;
#!/bin/bash
#
for S in {0..254};do
for U in {1..254};do
ping -c1 -W1 172.16.$S.$U &> /dev/null && echo "172.16.$S.$U is online." || echo "172.16.$S.$U is not online."
done
done
if 循环有三种:单分支、双分支和多分支
选择分支专门用来测试:
if,有三种:单分支、双分支、多分支
单分支语句:
if condition;then
statement
...
fi
例子:判断文件/etc/profile是否为目录文件,若果存在则删除
#!/bin/bash 带#为注释信息
#
if [ -d /etc/profile ];then
rm -rf /etc/profile &> /dev/null
fi
双分支:
if condition;then
statement
...
else
statement
...
fi
例子:查看/etc/profile是不是普通文件,如果是则显示“the file is a common file” 是不是连接文件:若是,则显示“the file is a link file”,否则,显示“the file is not unknown”
#!/bin/bash
#
#
if [ -f /etc/profile ];then
echo "the file is a common file.“
elif [ -L /etc/profile ];then
echo "the file is a link file"
else
echo "the file is not unknown”
fi
多分支:
if condition1;then
statement
...
elif condition2;then
statement
...
else
statement
...
fi
例子:查看/etc/profile文件的格式,若是普通文件,则显示“the file is a common file”;若是连接文件,显示“the file is a link file”;若是目录,则显示“the file is a directory”;否则,显示“the file is not unknown.”
# vim file1.sh
#!/bin/bash
#
if [ -f /etc/profile ]; then -f 判断文件类型是否为普通文件
echo "the file is a common file."
elif [ -L /etc/profile ]; then -L 判断文件类型是否为连接文件
echo "the file is a link file."
elif [ -d /etc/profile ]; then -d 判断文件类型是否为目录
echo "the file is a directory."
else
echo "the file is not unknown."
fi
while循环: 满足循环,不满足不循环
while CONDITTON;do
statement1
...
done
例子:脚本1、要求用户从键盘输入一个用户名,判断此用户是否存在,如果存在,则返回此用户的默认shell;如果不存在,提示用户不存在。
2、判断完成以后不要退出脚本,而是继续提示N|n(next)用户输入其它用户名以做出下一个判断,而键入其它任意字符可以退出;
util循环: 不满足循环,满足不循环
until CONDITTON; do
statement1
...
done
写一个脚本:
1、判断一个指定的脚本是否有语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出,其它任何键可以通过vim打开这个指定的脚本;
2、如果用户通过vim打开编辑后保存退出时仍然有错误,则重复第1步中的内容;否则,就正常关闭退出。
多分支选择:
case $VAR in
value1)
...
;;
value2)
...
;;
value3)
...
;;
*)
...
;;
esac
写一个脚本,完成以下功能:
1、提示用户输入一个用户名;
2、显示一个菜单给用户,形如:
U|u show UID
G|g show GID
S|s show SHELL
Q|q quit
3、提醒用户选择一个选项,并显示其所选择的内容;