脚本控制结构:
顺序
选择:if、case
循环:while、until、for
while CONDITION; do
statement;
...
done
满足条件循环,不满足则退出
until CONDITION ; do
statement;
...
done
不满足条件循环,满足则退出
for ((expr1;expr2;expr3));do list; done
for 变量 in 列表;
do
表达式 ;
done
写一个脚本:
1.通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线
如果在线,就显示“ip is up”,其中的ip要换为真正的ip,并用绿色表示
如果不在线,就显示“ip is down”,其中的ip要换为真正的ip,并用红色表示
要求:分别使用while、until和for实现。
#!/bin/bash
i=151
while [ $i -le 254 ] ;do
ping -c1 -w1 192.168.0.$i &>/dev/null && echo -e "\033[40;32m192.168.0.$i is up\033[0m"||echo -e "\033[40;31m192.168.1.$i is down\033[0m"
i=$[$i+1]
done
#!/bin/bash
i=151
until [ $i -gt 254 ] ;do
ping -c1 -w1 192.168.0.$i &>/dev/null && echo -e "\033[40;32m192.168.0.$i is up\033[0m"||echo -e "\033[40;31m192.168.1.$i is down\033[0m"
i=$[$i+1]
done
#!/bin/bash
for i in {151..254}; do
ping -c1 -w1 192.168.0.$i &>/dev/null && echo -e "\033[40;32m192.168.0.$i is up\033[0m"||echo -e "\033[40;31m192.168.1.$i is down\033[0m"
done
awk用法简介:
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
格式:awk 'PATTERN{ACTION}' file
$1:表示第一片,同理$2表示第二片...
NF:表示awk总共把这行分成了多少片,$NF则表示最后一片
[root@logstash magelearning]# df -h|awk '{print $2}'
Size
20G
234M
190M
[root@logstash magelearning]# df -h|awk /dev/'{print $2}'
20G
234M
190M
[root@logstash magelearning]# df -h|awk /sda'{print $2}'
awk: /sda{print $2}
awk: ^ unterminated regexp
[root@logstash magelearning]# df -h|awk /sda/'{print $2}'
20G
190M
[root@logstash magelearning]# df -h|awk '/sda/{print $2}'
20G
190M
[root@logstash magelearning]# df -h|awk '/sda/{print $2,$3}'
20G 4.0G
190M 41M
[root@logstash magelearning]# df -h|awk '/sda/{print $0,$2,$3}'
/dev/sda2 20G 4.0G 15G 22% / 20G 4.0G
/dev/sda1 190M 41M 140M 23% /boot 190M 41M
[root@logstash magelearning]# df -h|awk '/sda/{print $0}'
/dev/sda2 20G 4.0G 15G 22% /
/dev/sda1 190M 41M 140M 23% /boot
[root@logstash magelearning]# df -h|awk '/sda/{print NF}'
6
6
[root@logstash magelearning]# df -h|awk '/sda/{print $NF}'
/
/boot
[root@logstash magelearning]# df -h|awk '/sda/'
/dev/sda2 20G 4.0G 15G 22% /
/dev/sda1 190M 41M 140M 23% /boot
写一个脚本(前提:请为虚拟机新增一块硬盘,假设它为/dev/sdb),为指定的硬盘创建分区:
-
列出当前系统上所有的磁盘,让用户选择,如果选择q则退出脚本,如果用户选择错误,则让用户重新选择
-
当用户选择后,提醒用户确认接下来的操作可能会损坏数据,并请用户确认,如果用户选择y就继续,否则,让用户重新选择:
-
抹除那块硬盘上的所有分区(提示,抹除所有分区后执行sync命令,并让脚本睡眠3s后再分区;并为其创建三个主分区,第一个为20M,第二个为512M,第三个为128M,且第三个为swap分区类型;(提示将分区命令,echo给fdisk 即可实现)
#!/bin/bash
while : ; do
list=`fdisk -l|grep '^Disk /dev/[sh]d[ab]'|awk '{print $2}'|awk -F : '{print $1}'`
until fdisk -l|grep '^Disk /dev/[sh]d[ab]'|awk '{print $2}'|awk -F : '{print $1}'|grep "^$DISK$"; do
echo "please choice a disk:
$list
[q|Q] quit.."
read -p "your choice :" DISK
if [ $DISK == 'q' ] || [ $DISK == 'Q' ];then
echo "quiting..."
exit 0
fi
done
echo $DISK
echo -e "\033[40;31mit will destroy all data,Are you want to continue? [Y/N]\033[0m"
read CHOICE
if [ $CHOICE == 'Y' ] || [ $CHOICE == 'y' ];then
dd if=/dev/zero of=$DISK bs=512 count=1
sync
sleep 3
echo "n
p
1
+20M
n
p
2
+512M
n
p
3
+128M
t
3
82
w
"|fdisk $DISK
exit 0
fi
DISK=''
done