图文版shell脚本 (变量,if,case,for,while,)语句介绍!!!!!

1.shell简介:

shell的作用----命令解释器“翻译官”

  • 介于系统内核与用户之间的,负责解释命令行

今天主要说shell脚本里的一些语句使用

1.1常用的测试操作符

  • 文件测试:
    [ 操作符 文件或目录 ]
    在这里插入图片描述
  • 整数值比较
    [ 整数1 操作符 整数2 ]
    在这里插入图片描述
  • 字符串比较
    [ 字符串1 = 字符串2 ]
    [ 字符串1 != 字符串2 ]
    [ -z 字符串 ]
    在这里插入图片描述
  • 逻辑测试
    [ 表达式1 ] 操作符 [ 表达式2 ]
    命令1 操作符 命令2
    在这里插入图片描述

1.2变量

■ 变量的作用

  • 用来存放系统和用户需要使用的特定参数(值)
  • 变量名:使用固定的名称,由系统预设或用户定义
  • 变量值:能够根据用户设置、_系统环境的变化而变化
    ■ 变量的类型
  • 自定义变量:由用户自己定义、修改和使用
  • 特殊变量:环境变量,只读变量,位置变量,预定义变量
    ■自定义变量
    ■ 定义一个新的变量
  • 变量名以字母或下划线开头,区分大小写,建议全大写
    ■ 查看变量的值
echo $变置名
[root@localhost ~]# Products Python 
[root@ local host ~]# Version=2.7.13 
[root@localhost ~]# echo $Product 
Python 
[root@ local host ~]# echo $Product $Version Python 2.7.13

自定义变量
■ 赋值时使用引号

  • 双引号:允许通过$符号引用其他变量值
  • 单引号:禁止引用其他变量值,$视为普通字符
  • 反撇号:命令替换,提取命令执行后的输出结果

■ 从键盘输入内容为变量赋值

read [-p "提示信息"]变量名

■ 设置变量的作用范围

格式1: export变量名… 
格式2: export变置名=变置值...
 echo  "SProduct  $Version’ Benet 6.0 
 export  Product  Version  
 basK? 
 echo  "SProduct  $Version Benet 6.0

2. if语句

  • 单分支
  • 双分支
  • 多分支

单分支

if   条件测试操作           
  then   命令序列
fi 
FHQ=$(systemctl status firewalld |grep "Active:"|awk '{print $2}')
if  [ $FHQ = active ]
  then
        echo "防火墙已启动,不需要操作"
fi

在这里插入图片描述

双分支

if  条件测试操作
    then  命令序列
    else   命令序列
fi
if [ $? -eq 0 ]
then
        echo "host $IP ping is up" && echo "host $IP ping is up"  >> /root/up.txt
else
        echo "host $IP ping is down" && echo "host $IP ping is down" >> /root/down.txt
fi

在这里插入图片描述

多分支

if 条件测试操作1
  then 命令序列1
elif  条件测试操作2
  then  命令序列2
else
   命令序列3
 fi 
#!/bin/bash
read -p "请输入你的分数(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
        echo "$GRADE 分,优秀!"
elif [ $GRADE -ge 60 ] && [ $GRADE -le 84 ]
then
        echo "$GRADE 分,合格!"
elif [ $GRADE -ge 0 ] &&  [ $GRADE -le 59 ]
then
        echo "$GRADE分,不合格!"
else
        echo "$GRADE分,输入格式不对,请重新输入:"
fi

在这里插入图片描述

3.case语句

case 变量值 in 
模式1)
      命令序列
      ;;
模式2)
      命令序列
      ;;
......
*)
默认命令序列
esac

咱们随便敲一个玩一下:
例:你觉得我长得帅吗?

#!/bin/bash
read -p "你觉得我帅吗?(帅/不帅):" SHUAI
case "$SHUAI" in
帅)
        echo "你可真有眼光!"
        ;;
不帅)
        echo "请不要说谎话!"
        ;;
*)
        echo "请输入帅或者不帅,亲,建议您输入帅哦"
esac
 ./hggas.sh 
你觉得我帅吗?(帅/不帅):不帅     
请输入帅或者不帅,亲,建议您输入帅哦
 ./hggas.sh 
你觉得我帅吗?(帅/不帅):帅     
你可真有眼光!

在这里插入图片描述

在这里插入图片描述

4.for语句

  • 读取不同的变量值,用来逐个执行同一组命令
for 变量名 in 取值列表
do 
    命令序列
done

注:取值列表可以是一个文本文件,可以是一个自定义范围值。
如:/opt/as.txt for的取值列表可以文本文件为例,
也可以是{1…10}, $(seq 1 10 ),((i=1;i<=10;i++))

 for i in {1..10};do  echo $i ;done
1
2
3
4
5
6
7
8
9
10

在这里插入图片描述

5.while 语句

  • 重复的测试某个条件,只要条件成立则一直反复执行
while 条件测试操作
do 
    命令序列
done 

猜价格游戏!!!

#!/bin/bash
Pr=$(expr $RANDOM % 1000)
TIMES=0
echo "价格的范围为0~999,猜猜是多少?"
while true
do
        read -p "请输入您猜测的价格:" JIA
        let TIMES++
if [ $JIA -eq $Pr ]
then
        echo "恭喜你答对了,实际价格是$Pr"
        echo "你总共猜了$TIMES次"
        exit 0
elif [ $JIA -gt $Pr ]
then
        echo "太高了"
else
        echo "太低了"
fi
done

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_47320286/article/details/108038684