######################## 1. if 单分支 #########################
1):统计登陆SHELL为bash 的用户;先定义变量I
awk -F: 'BEGIN{i=0}{if($7~/bash$/){i++}}END{print i}' /etc/passwd
2):统计UID 小于500的 uid 在/etc/passwd 中
[root@foundation17 Desktop]# awk -F: 'BEGIN{i=0}{if($3<=500)(i++)}END{print i}' /etc/passwd
31
################### 2.if 双分支 #############################
1)统计uid小于等于500和大于500的个数
awk -F: 'BEGIN{i=0;j=0}{if($3<=500){i++}else{j++}}END{print i,j}' /etc/passwd
################### 3. for 循环 #########################
格式:
for 条件
do
动作
done
1):让变量依次取1 2 3
方法一:
for NUM in 1 2 3------让变量依次取1 2 3
do
echo $NUM
done
方法二:
for NUM in `seq 1 2 3`
do
echo $NUM
done
2):检测当前网络环境中所有主机的状态
#/bin/bash
for NUM in `seq 100`
do
ping 172.25.254.$NUM $>/dev/null && echo 172.25.254.$NUM is up || echo 172.25.254.$NUM is down
done
3):打印1-5
seq 5 生成序列1-5
awk 'BEGIN{for(i=1;i<=5;i++){print i}}'
练习1:
检测活跃的主机号码()三种表达方法
1)
#!/bin/bash
for NUM in `seq 100`
do
ping -c1 -w1 172.25.254.$NUM &>/dev/null && echo 172.25.254.$NUM is up || echo 172.25.254.$NUM is down
done
2)
#!/bin/bash
for ((a=1;a<100;a++))
do
ping -c1 -w1 172.25.254.$NUM &>/dev/null && echo 172.25.254.$NUM is up || echo 172.25.254.$NUM is down
done
3)
#!/bin/bash
for a in {1..100}
do
ping -c1 -w1 172.25.254.$NUM &>/dev/null && echo 172.25.254.$NUM is up || echo 172.25.254.$NUM is down
done
练习2:
倒计时:10秒关机
#!/bin/bash
for ((a=10;a>0;a--))
do
echo -n " TIME $a "
echo -ne "\r" #-e为添加解析
sleep 1
done
2)倒计时
分钟+秒
#!/bin/bash
read -p "please input minute: " a
read -p "please input seconds:" b
let i=a*60+b
for ((;i>0;i--))
do
let a=i/60
let b=i%60
echo -n " $a:$b "
echo -ne "\r"
sleep 1
done
################## 4.while 循环 ###################
怎么查看系统开启了多长时间 uptime
#!/bin/bash
while true
do
uptime
sleep 2
done
练习:
非交互式修改密码
echo "123456" | passwd --stin student
创建westos 1-20 密码都是 123456
PREFIX="westos"
i=1
while [ $i -le 20 ]
do
useradd ${ PREFIX}$i
echo "123456" | passwd --stdin ${ PREFIX} $i &> /dev/null
((i++))
done
批量删除:
#!/bin/bash
PREFIX="westos"
i=1
while [ $i -le 20 ]
do
userdel -r ${PREFIX}$i &> /dev/null
echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null
((i++))
done
#################### 5. 嵌套循环 #######################
#!/bin/bash
for ((a=1;a<=3;a++))
do
echo "starting outside loop:$a"
for ((b=1;b<=3;b++))
do
echo “Iside loop: $b”
done
done
练习:
打印9*9乘法表
#!/bin/bash
2 for ((a=1;a<=9;a++))
3 do
4 for ((b=1;b<=a;b++))
5 do
6 ((t=$a*$b))
7 echo -ne " $a*$b=$t\t\c " 一个制表位8个空格
8 done
9 echo
10 done
方法二:
#!/bin/bash
for i in $( seq 9)
do
for j in $(seq $i)
do
echo -ne "$i*$j=$(($i*$j))\t"
done
echo -e "\n"
done
####################### 6. if 语句 #################
脚本:
如果用户是kiosk,输出Hello kiosk
#!/bin/bash
user=kiosk
if grep $user /etc/passwd;then
echo "Hello $user"
fi
if date;then
echo "Hello date"
fi
##################### 7. if-else 语句 ###################
格式:
if 条件; then
动作1
elif
动作3
elif
动作4
else
动作2
fi
脚本:
如果用户是student,输出welcome student
如果用户是westos,输出welcome westos
如果用户是kiosk,输出welcome kiosk
如果用户是linux,输出welcome linux
否则输出你不被允许
#!/bin/bash
if [ "$1" -eq "student" ];then
echo "Welcome $1"
elif [ "$1" -eq "westos" ];then
echo "Welcome $1"
elif [ "$1" -eq "kiosk" ];then
echo "Welcome $1"
elif [ "$1" -eq "linux" ];then
echo "Welcome $1"
else
echo "You are not allowed!"
fi
################## 8.case 语句 #############################
用户分析
脚本:
如果用户是student,kiosk,linux,westos中的任一一个,输出 welcome ,用户
否则输出sorry
#!/bin/bash
case $1 in
student|kiosk|linux|westos)
echo "Welcome,$1"
;;
*)
echo "Sorry!"
;;
esac
脚本:
输入a为红色,b 为绿色,c为黄色,d为蓝色
用户输入A 显示主机IP
B 显示磁盘剩余空间、
C 显示运行时间
Q 退出系统
#!/bin/bash
while true
do
echo -e "
\033[31m A 显示主机IP \033[0m
\033[32m B 显示磁盘剩余空间 \033[0m
\033[33m C 显示系统运行世界 \033[0m
\033[34m Q 退出系统 \033[0m
"
read -p "please input character:" char
case $char in
a|A)
ifconfig br0 | grep "inet " | awk '{print $2}'
;;
b|B)
df -h | awk 'NR==2{print "剩余空间为:"$4}'
;;
c|C)
uptime | awk '{print $3}' | awk -F, '{print $1}'| awk -F: '{printf" 系统已经运行了"$1"小时"$2"分> 钟"}'
;;
q|Q)
exit 0
;;
esac
done