脚本完成分区格式化

脚本控制结构:

    顺序

    选择: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),为指定的硬盘创建分区:

  1. 列出当前系统上所有的磁盘,让用户选择,如果选择q则退出脚本,如果用户选择错误,则让用户重新选择

  2. 当用户选择后,提醒用户确认接下来的操作可能会损坏数据,并请用户确认,如果用户选择y就继续,否则,让用户重新选择:

  3. 抹除那块硬盘上的所有分区(提示,抹除所有分区后执行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


本文出自 “单季稻” 博客,谢绝转载!

你可能感兴趣的:(shell,awk)