SHELL-流程控制脚本案例
1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限
#!/bin/bash
#判断家目录中文件是否存在
if [[ -e $home/test.sh ]];then
#-x判断该文件是否可以执行
if [[ -x $home/test.sh ]];then
echo '文件存在且可执行'
else
echo '文件存在不可执行'
fi
else
echo '文件不存在'
fi
执行结果:
[root@localhost data2]# bash test1.sh
文件存在且可执行
2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误
#读取输入时间
read -p '请输入百米跑秒数:' run_time
#判断是否为数字,如果不是重新执行脚本
if echo $run_time | grep -q '[^0-9]';then
echo '这不是数字,请输入数字'
bash $0
else
#判断时间大小
if [[ ${run_time} -ge 0 && ${run_time} -le 10 ]];then
echo '恭喜进入选拔赛'
#输入性别
read -p '请输入性别(man or woman):' person_sex
if [[ ${person_sex} = 'man' ]];then
echo '进入男组'
elif [[ ${person_sex} = 'woman' ]];then
echo '进入女组'
else
echo '输入错误'
fi
elif [[ ${run_time} -gt 10 ]];then
echo '你被淘汰了'
else
echo '输入错误,请重新输入'
bash $0
fi
fi
运行结果:
[root@localhost data2]# bash test2.sh
请输入百米跑秒数:9
恭喜进入选拔赛
请输入性别(man or woman):man
进入男组
3.提示用户输入内容,使用if 语句判断输入的内容是否为整数。并判断奇数偶数
#!/bin/bash
#判断整数
read -p '请输入一个数字:' num
if echo ${num} | grep '[^0-9]';then
echo '不是整数'
else
echo '是整数'
#对输入的数字取余,余数为0是偶数,否则为奇数
i=$(expr ${num} % 2)
if [[ $i -eq 0 ]];then
echo '是偶数'
else
echo '是奇数'
fi
fi
运行结果:
[root@localhost data2]# bash test3.sh
请输入一个数字:9
是整数
是奇数
[root@localhost data2]# bash test3.sh
请输入一个数字:10
是整数
是偶数
[root@localhost data2]# bash test3.sh
请输入一个数字:4.5
4.5
不是整数
4.计算从1到100所有整数的和
#!/bin/bash
#i值在1-100间迭代
for i in {1..100};do
#计算 sum=i+sum
let sum+=$i
done
#打印sum值
echo ${sum}
运行结果
[root@localhost data2]# bash test4.sh
5050
5.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
read -p "请输入小于100的数:" num
#判断数字是否小于100,不小于100则重新输入
if [ $num -le 100 ];then
#i从0到输入的数字间迭代
for ((i=0;i<=$num;i++));do
let sum+=$i
done
echo ${sum}
else
echo "请输入小于100的数字:"
bash $0
fi
运行结果:
[root@localhost data2]# bash test5.sh
请输入小于100的数:65
2145
6.求从1到100所有整数的偶数和、奇数和
#!/bin/bash
#i从1开始取值,取到100,隔两个数取一个,如:1 3 5
for i in {1..100..2};do
let sum1+=$i
done
echo "100内奇数和为${sum1}"
#i从0开始取值,取到100,隔两个数取一个
for i in {0..100..2};do
let sum2+=$i
done
echo "100内偶数和为${sum2}"
运行结果:
[root@localhost data2]# bash test6.sh
100内奇数和为2500
100内偶数和为2550
7.用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码
#!/bin/bash
#遍历user文件中的数据
for i in $(cat /data/user.txt);do
#查看用户是否存在
if awk -F':' '{ print $1}' /etc/passwd |grep $i;then
echo "${i}用户已经存在"
else
useradd $i
echo "请输入用户${i}密码"
passwd $i
fi
done
8.用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警
#!/bin/bash
password=123456
i=0
while true;do
read -p "请输入用户密码:" input
if [ $password == $input ];then
echo "密码输入正确"
break
elif [ $i -le 2 ];then
let i+=1
echo "密码第${i}次错误,请重新输入"
continue
else
echo "错误已超过三次"
break
fi
done
运行结果:
[root@localhost data2]# bash test8.sh
请输入用户密码:15
密码第1次错误,请重新输入
请输入用户密码:164'^H
密码第2次错误,请重新输入
请输入用户密码:123456
密码输入正确
9.随机生成一个8位密码
#!/bin/bash
#定义随机密码生成字符范围
rd="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789"
for i in {1..8};do
#从rd中截取一个随机字符
rd_num=$[$RANDOM%${#rd}]
#将随机字符加入password
password+=${rd:$rd_num:1}
done
#打印随机密码
echo $password
运行结果:
[root@localhost data2]# bash test9.sh
zGqTDtxg
10.将10进制数装换为2进制数
#!/bin/bash
#参看10进制转2进制流程
read -p "请输入一个数: " n
while [ $n -ne 0 ]
do
#对n取余,获取余数
y=$[$n % 2]
n=$[$n / 2]
tentotwo=$y${tentotwo}
done
echo -n "二进制数为:"
echo $tentotwo
运行结果:
[root@localhost data2]# bash test10.sh
请输入一个数: 16
二进制数为:10000
11.输出一个菱形,通过输入的值控制大小
read -p "请输入棱形大小:" n
for ((a=1;a<=$n;a++));do
#输出一个空的三角形
for ((b=$n;b>=a;b--));do
echo -n " "
done
#输出一个实心三角
for ((c=1;c<=a;c++));do
echo -n "*"
done
#输出实心三角
for ((d=2;d<=a;d++));do
echo -n "*"
done
echo ""
done
for ((a=$[$n -1];a>=1;a--));do
#输出空三角
for ((b=$n;b>=a;b--));do
echo -n " "
done
#控制输出一个倒实心三角
for ((c=$[ 2 * $a - 1 ];c>=1;c--));do
echo -n "*"
done
echo ""
done
运行结果:
[root@localhost data2]# bash test13.sh
请输入棱形大小:2
*
***
*
[root@localhost data2]# bash test13.sh
请输入棱形大小:6
*
***
*****
*******
*********
***********
*********
*******
*****
***
*