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
      *
     ***
    *****
   *******
  *********
 ***********
  *********
   *******
    *****
     ***
      *
posted @ 2022-04-19 20:04  残-云  阅读(86)  评论(0编辑  收藏  举报