X-linux

Linux---Day13

2020-04-17  本文已影响0人  茶馆先生的马褂

脚本编程控制结构之until
循环
for
while
until

while CONDITION; do
statement
done
进入循环:条件满足
退出循环:条件不满足

until CONDITION; do
statement
...
done
进入循环:条件不满足
退出循环:条件满足

vim quit.sh

#!/bin/bash
read -p "Input something:" STRING
while [ $STRING != 'quit' ]; do
echo $STRING | tr 'a-z' 'A-Z'
read -p "Again Input something:" STRING 
done

chmod +x quit.sh
./quit.sh

bash -x quit.sh (查看脚本进展过程)
vim until.sh
#!/bin/bash
#
read -p "Input something:" STRING (输入字符保存在STRING当中)
until [ $STRING == 'quit' ]; do
echo $STRING | tr 'a-z' 'A-Z'
read -p "Input something:" STRING
done

chmod +x until.sh
./until.sh

每隔5秒钟查看hadoop是否登录

vim hadoop.sh

#!/bin/bash
#
who | grep "hadoop" &> /dev/null
RETVAL = $? ($? 上一个命令的结果 0 为执行正确)

until [ $RETVAL -eq 0 ]; do
echo "hadoop is not come."
sleep 5
who | grep "hadoop" &> dev/null
RETVAL = $?
done
echo "hadoop is logged in."
chmod +x hadoop.sh

修正版:

vim hadoop.sh

#!/bin/bash
#
until who | grep "hadoop" &> /dev/null; do 
echo "hadoop is not come."
sleep 5
done
echo "hadoop is logged in."

chmod +x hadoop.sh

for 循环
for 变量 in 列表;do
循环体
done

for ((expr1;expr2;expr3));do
循环体
done
近似C语言的风格
计算1-100以内所有正整数的和

#!/bin/bash
#
declare -i SUM = 0
for I in {1..100}; do
let SUM+=$I
done
 echo $SUM

换一种写法

#!/bin/bash
#
declare -i SUM=0
for ((I =1;I <=100;I++));do
let SUM+=$I
done
echo $SUM

for((I=2;I<=100;I+=2));do
100以内所有偶数的和
for((I=1;I<=100;I+=2));do
100以内所有奇数的和

***通过ping命令,测试192.168.0.151到192.168.0.254之间的所有主机是否在线,
如果在线,就显示“ip is up”,其中IP要换位真正的IP地址,且以绿色显示;
如果不在线,就显示“ip is down”,其中IP要换位真正的IP地址,且以红色显示。

要求:分别用while ,until ,for 循环实现
ping命令的使用:ping 192.168.0.254
ping -c 1 192.168.0.254 -c表示ping的次数,否则会一直ping下去
echo $?
ping -W
-W选项: timeout Time to wait for a response, in seconds.
ping -c 1 -W 1 192.168.0.245
ping -c 1 -W 1 192.168.0.245 &> /dev/null

awk

awk:报告生成工具,当cut完成不了任务时使用awk,也是一个文本处理工具
一次从中读一行,每读一行按照指定的分隔符在内部切开,切开后给切开的每一段一个标识符。将处理后的结果显示出来。
df -Ph

awk 'PATTERN{ACTION}' file 默认分隔符是[space]
PATTERN表示过滤,指出处理哪些符合条件的行;
ACTION:
print $1 显示第一段

df -Ph | awk '{print $1}' 显示第一段
df -Ph | awk '{print $2}'显示第二段
df -Ph | awk '{print $1,$2}' 显示第一段和第二段,之间用,隔开
df -Ph | awk '{print $0}' 显示所有字段
df -Ph | awk '{print $NF}' NF number of field 字段个数,显示最后一段
awk -F: '{print 1,3}' /etc/passwd 分隔符为“:”
fdisk -l 2> /dev/null 将错误信息给到/dev/null
fdisk -l 2> /dev/null | grep "^Disk /dev/[sh]d[a-z]" 以Disk开头,s或h开头后面跟d, a-z中任意一个字符
结果:Disk /dev/sda: 128.8GB, 128849018880 bytes
fdisk -l 2> /dev/null | grep "^Disk /dev/[sh]d[a-z]" | awk -F: '{print $1}'
结果:Disk /dev/sad

关机命令:shutdown -h now

R: the system is going down for system halt NOW!

添加虚拟磁盘:

***抹除那块硬盘上的所有分区(提示,抹除所有分区后执行sync命令,并让脚本睡眠3秒后再分区);并为其创建三个主分区,第一个为20M,第二个为512M,第三个为128M,且第三个为swap分区类型,(提示:将分区命令通过echo传送给fdisk即可实现)
删除所有分区
dd if=/dev/zero of=/dev/sdb bs=512 count=1
把所有操作同步内存与硬盘
sync
sleep 3

fdisk -l | grep "^Disk /dev/[sh]d[a-z]"
fdisk -l 2> /dev/null | grep  "^Disk /dev/[sh]d[a-z]"
fdisk -l 2> /dev/null | grep  "^Disk /dev/[sh]d[a-z]" | awk -F: '{print $1}'

vim setpart.sh
#!/bin/bash
#
echo 'n ###new 一个分区
p ###主分区还是扩展分区
1 ###第几个编号

+20M 
n
p
2

+512M
n
p
3

+128M
t ###调整哪个分区
3 ###第三个
82 ###类型为82
w' | fdisk /dev/hda

:wq

sync
fdisk -l
上一篇 下一篇

猜你喜欢

热点阅读