Shell脚本------------条件语句(三) (for 、case)

一、逻辑测试

这也是一个双分支 

取反
&&    且   全真则真  ,一假即假
| | 或    全假才假 ,一真即真
使用格式

cmd1  &&   cmd2  || cmd3   如果cmd1成功执行cmd2 

                                            如果cmd1不成功就执行cmd3

二、if  语句的结构

分支结构

1.单分支

如果只有一个判断式要进行,那么我们可以使用单分支的if语句 ,只有在条件成立时才会执行,否则不执行任何操作

原理:

格式:

if [ 条件判断式 ]; then
    当条件判断成立时,可以进行的命令工作内容
fi                  #这里将if反过来写,结束if语句的意思

2.双分支结构

原理:

在同一个数据的判断中,如果该数据需要进行两种不同的判断,我们就需要双分支if语句了:

格式:

if [ 条件判断式 ]; then
    当条件判断成立时,可以进行的命令工作内容
else   
    当条件判断不成立时,可以进行的命令工作内容
fi 

实验:

目的:先检测80端口是否开启,如果开启则反馈httpd正在运行,否则启动httpd服务

#!/bin/bash
#先检测80端口是否开启,如果开启则反馈httpd正在运行,否则 启动httpd 服务


systemctl  status httpd
if [ $? -eq 0 ];then
echo "http 服务正在运行"
else
systemctl start httpd  &>/dev/null
    if [ $? -eq 0 ];then
      echo "http服务正常启动"
      else
       echo "服务没有运行请检查"
      fi
fi

3.双分支结构

如果数据需要进行多种不同的判断,则可以使用多分支结构

原理:

格式:

if [ 条件判断式 ]; then
    当条件判断成立时,可以进行的命令工作内容
elif [ 条件判断式二 ]; then
    当条件判断成立时,可以进行的命令工作内容
elif [ 条件判断式三 ]; then
    当条件判断成立时,可以进行的命令工作内容
else   
    当上面的条件判断都不成立时,可以进行的命令工作内容
fi     

实验1:

#!/bin/bash
#安装httpd服务 先判断操作系统 如果centos 用yum 装 如果是ubuntu 用apt装 其他暂不支持
if grep -q centos /etc/os-release
then
yum install httpd -y &> /dev/null
   if [  $? -eq 0 ]
   then
   echo "安装成功"
   else
   echo "安装失败请检查"
   fi
elif grep -q ubuntu /etc/os-release
then
apt install apache2 -y &>/dev/null
   if [  $? -eq 0 ]
   then
   echo "安装成功"
   else
   echo "安装失败请检查"
   fi
else
echo  "您的操作系统暂时不支持"

fi
 实验2:来个自定义的分数脚本

实验目的:

定义下:90-100 为优秀   70-89良好   60-69 及格  0-59 不及格  其他输入有误请重新输入

方法一:

#!/bin/bash
# 90-100 为优秀   70-89良好   60-69 及格  0-59 不及格 其他输入有误请重新输入

read    -p "请输入您的分数(0-100的正整数):" grade
if [ $grade  -ge 90   -a $grade -le 100 ];then
 echo "优秀"
elif [ $grade -ge 70 -a  $grade -le 89 ];then
 echo "良好"
elif [ $grade -ge  60 -a $grade -le 69 ];then
 echo "及格"
elif [ $grade -ge  0  -a  $grade -le 59 ];then
 echo "不及格"
else
  echo "输入有误,请重新输入"
bash $0
fi
~   

方法二:

#!/bin/bash
#考试分数在90-100为优秀,70-89为良好,60-69为合格,低于60为不合格
read -p "请输入你的考试分数:" grade

if [ $grade -ge 90 ] && [ $grade -le 100 ];then
  echo "你的成绩为$grade"
  echo "你的成绩为优秀"
elif [ $grade -ge 70 ] && [ $grade -le 89 ];then
   echo "你的成绩为$grade"
   echo "你的成绩为良好"
elif [ $grade -ge 60 ] && [ $grade -le 69 ];then
  echo "你的成绩为$grade"
  echo "你的成绩为合格" 
else
  echo "你的成绩为$grade"
  echo "你的成绩不合格"
fi

轻松一刻

小游戏:人 机 石头剪刀布

方法一:

#!/bin/bash

#接下来的是石头剪刀布的游戏
read -p "请输入1(布)2(剪刀)3(石头): " ren
m=`echo   $[RANDOM%3+1]`

if [ $ren -eq $m ]
then
echo "打成平局了哈"
elif [ $ren -eq 1 -a $m -eq 3 -o $ren -eq 2 -a $m -eq 1 -o $ren -eq 3 -a $m -eq 2 ]
then
echo "哇哦,太棒了,你赢了"
else
echo "呜呜呜,你输了"
bash $0
fi
~    

方法二:

#!/bin/bash

#接下来的是石头剪刀布的游戏
read -p "请输入1(布)2(剪刀)3(石头): " ren
m=`echo   $[RANDOM%3+1]`

case $ren in
1)
ren="布"
;;
2)
ren="剪刀"
;;
3)
ren="石头"
;;
esac


case $m in
1)
m="布"
;;
2)
m="剪刀"
;;
3)
m="石头"
;;
esac


if [ $ren = $m ]
then
echo "打成平局了哈"
echo "你出的是: $ren "
echo "计算机出的是: $m "
elif [ $ren = "布"  -a $m = "石头" -o $ren = "剪刀"  -a $m = "布"  -o $ren = "石头"  -a $m = "剪刀" ]
then
echo  "哇哦,太棒了,你赢了"
echo  "你出的是: $ren "
echo  "计算机出的是: $m "
else
echo  "呜呜呜,你输了"
echo  "你出的是: $ren "
echo  "计算机出的是: $m "
bash $0
fi

 二、AWK     一种语言  

在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。而awk比较倾向于将一行分成多个字段然后进行处理。AWK信息的读入也是逐行指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互 的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务。

awk 比较倾向于将一行分成多个“字段”然后再进行处理,以空格为分隔符

awk 执行结果可以通过 print 的功能将字段数据打印显示

常见选项:

  • -F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符

  • -v  变量赋值

三、case


语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本
case
语句主要适用于以下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 语非常相似,只不过 if 语句需要判断多个不同的条件,而 case 语句只是判断一个量的不同取值

case支持glob风格的通配符:
* 任意长度任意字符
? 任意单个字符
[0-9] 指定范围内的任意单个字符
|   或者,如: a|b

注意点:

  • case行首必须以单词“in”,每一模式必须以单个右括号 )

  • 双分号   ;;  表示命令序列的结束

格式:
case 变量值 in
模式1)
	命令序列
    ;;
模式2)
	命令序号
	;;
*)
	不包含第一个变量内容与第二个变量内容的其他程序执行段
	默认程序段
	;;
esac

 实验1:输入一个字符,判断输入的是 字母 数字 还是 特殊字符

#!/bin/bash
#输入一个字符,判断输入的是 字母 数字 还是 特殊字符
read  -p "请输入一个字符:" zifu
case   $zifu in
[a-z]|[A-Z])
 echo "您输入的是字母"
 ;;
[0-9])
 echo "您输入的是数字"
  ;;
*)
 echo "您输入的是特殊字符哈"
   ;;
esac

实验2:yes 或no

目的:判断输入的是 yes( y,Y ,yES,yeS,YES,yeS,yEs) 或者no (N ,n ,NO, No)

#!/bin/bash
#判断输入的是 yes( y,Y ,yES,yeS,YES,yeS,yEs) 或者no (N ,n ,NO, No)

read  -p "请输入yes或者no:" i
case  $i  in
[yY]|[yY][eE][sS])
echo "您输入的是yes"
;;
[nN]|[Nn][oO])
echo "您输入的是no"
;;
*)
echo "您输入有错误请重新输入"
bash $0
esac

方法一:

方法二:

#!/bin/bash
#判断输入的是 yes( y,Y ,yES,yeS,YES,yeS,yEs) 或者no (N ,n ,NO, No)

read  -p "请输入yes或者no:" i
nihao=`echo $i|tr 'A-Z' 'a-z'`
case  $nihao  in
y|yes)
echo "您输入的是yes"
;;
n|no)
echo "您输入的是no"
;;
*)
echo "您输入有错误请重新输入"
bash $0
esac

先定义个变量看看

实验开始了:


 

实验3:写工具箱脚本

内存、内核、主机名、磁盘大小

#!/bin/bash
cat << EOF
echo "--------------------------------------------------"
1.查看内存
2.查看主机名
3.内核
4.磁盘大小
5.退出工具箱
echo "---------------------------------------------------"
EOF

read  -p "请输入您的选择(1-5):" num
case $num in
1)
free
echo "---------------------------------------------------"
bash $0
;;

2)
hostname
bash $0
;;

3)
uname -r
bash $0
;;

4)
lsblk |grep  disk|awk '{print $4}'
bash $0
;;

5)
exit
;;

esac

娱乐一下:xhell工具箱不见了,咋找回

相关推荐

  1. linux shell脚本 条件语句

    2024-01-27 19:16:01       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-27 19:16:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-27 19:16:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-27 19:16:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-27 19:16:01       20 阅读

热门阅读

  1. 使用scyllaDb 或者cassandra存储聊天记录

    2024-01-27 19:16:01       32 阅读
  2. 天梯赛 L3-020 至多删三个字符

    2024-01-27 19:16:01       36 阅读
  3. 《动手学深度学习(PyTorch版)》笔记4.2 4.3

    2024-01-27 19:16:01       34 阅读
  4. Implement Trie (Prefix Tree)

    2024-01-27 19:16:01       27 阅读
  5. Oracle 数据库(卸载)详细过程

    2024-01-27 19:16:01       34 阅读
  6. spring自动配置的原理

    2024-01-27 19:16:01       32 阅读
  7. 【重点问题】攻击面发现及管理

    2024-01-27 19:16:01       35 阅读
  8. 深度学习在医学影像分析中的应用

    2024-01-27 19:16:01       36 阅读