shell-变量-判断语句

1、变量的作用

为灵活管理Linux系统提供特定参数,有两层意思:  

变量名:使用固定的名称,由系统预设或用户定义   

变量值:能够根据用户设置、系统环境的变化而变化

2、变量的类型

自定义变量:由用户自己定义、修改和使用

环境变量:由系统维护,用于设置工作环境

位置变量:通过命令行给脚本程序传递参数

预定义变量:Bash中内置的一类变量,不能直接修改

定义一个新的变量

格式:变量名=变量值

变量名以字母或下划线开头,区分大小写,建议全大写

查看变量的值

格式:echo  $变量名

Product=PPT
Version=3.0
echo $Product
echo $Product $Version

赋值时可以使用引号,它们将有如下意义:

双引号:允许通过$符号引用其他变量值

如NEW=“WORD$Version”,将引用上面的变量,结果是WORD3.0

单引号:禁止引用其他变量值,$视为普通字符

当需要用$符号时。如CASH=‘US$IS’

反撇号:命令替换,提取命令执行后的输出结果

如EX=`pgrep –U root | wc –l`,把命令结果赋给EX

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

格式: read  [-p  “提示信息”]  变量名

如read  –p “请输入循环次数:” CISHU

NEW=“WORD$Version”
echo $NEW
CASH='US$IS'
echo $CASH
EX='pgrep -U root | wc -l'
echo $EX

设置变量的作用范围

格式1:export   变量名 ... (已有的变量)

格式2: export  变量名=变量值  ...(新定义的变量)

—— 两种格式可以混合使用

echo $Product $Version
export Product Version
bash
echo $Product $Version
echo $EX $CISHU
exit
echo $EX $CISHU

整数变量的运算(赋值时必须用反撇号`)

格式:expr  变量1   运算符  变量2  [运算符 变量3] ...

常用运算符

加法运算:+

减法运算: -

乘法运算: \*

除法运算: /

求模(取余)运算: %

例:echo  $EX  $CISHU    

 AK=`expr $EX + $CISHU` (假定read 时输入15)    

echo $AK

例AK=`expr $EX - $CISHU`    

echo $AK

例AK=`expr $EX \* $CISHU`    

echo $AK

例AK=`expr $EX / $CISHU`    

echo $AK

例AK=`expr $EX % $CISHU`      

 echo $AK

echo  $EX  $CISHU    
AK=`expr $EX + $CISHU`    
echo $AK
AK=`expr $EX - $CISHU`    
echo $AK
AK=`expr $EX \* $CISHU`    
echo $AK
AK=`expr $EX / $CISHU`    
echo $AK
AK=`expr $EX % $CISHU`      
echo $AK

环境变量

由系统提前创建,用来设置用户的工作环境

配置文件: /etc/profile、~/.bash_profile

常见的环境变量:

echo $PATH
PATH=“$PATH:/root” (添加一下新路径/root)
echo $PATH

位置变量

表示为 $n,n为1~9之间的数字,超过9则用${n}

cat myprog.sh
echo “字母表第5个字母是:” $5
echo “字母表第18个字母是:” ${18}
sh myprog.sh {a..z}
字母表第5个字母是:e
字母表第18个字母是:r

 预定义变量

cat mybak.sh
#!/bin/bash
TARFILE=beifen-`date +%Y%m%d`.tgz
tar zcf $TARFILE $* &> /dev/null
echo "已执行 $0 脚本,"
echo "共完成 $# 个对象的备份"
echo “具体内容包括: $*” 
sh mybak.sh  /etc/passwd  /etc/shadow 
ls *.tgz

test命令

测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值

格式1:test  条件表达式

格式2:[  条件表达式  ] (至少应有一个空格)

文件测试 格式:[  操作符  文件或目录  ]

常用的测试操作符(先clear)

-d:测试是否为目录(Directory)

-e:测试目录或文件是否存在(Exist)

-f:测试是否为文件(File)

-r:测试当前用户是否有权限读取(Read)

-w:测试当前用户是否有权限写入(Write)

-x:测试当前用户是否有权限执行(eXcute)

[  -d /etc/ssh  ]
echo $?
[  -d /etc/hosts  ]
echo $?
[ -e /dev/cdrom ] && echo "YES"
[ -e /dev/usb ] && echo "YES"

整数值比较 格式:[  整数1  操作符  整数2  ]

常用的测试操作符(先clear,假定虚拟机内存为1024M)

-eq:等于(Equal)

-ne:不等于(Not Equal)

-gt:大于(Greater Than)

-lt:小于(Lesser Than)

-le:小于或等于(Lesser or Equal)

-ge:大于或等于(Greater or Equal)

who | wc -l
[ $(who | wc -l) -gt 1 ] && echo "Too many." 
[ $(who | wc -l) -ge 2 ] && echo "> = 2."
FreeCC=$(free -m | grep "Mem" | awk '{print $4}')
[ $FreeCC -lt 1024 ] && echo ${FreeCC}MB

字符串比较

格式1:[  字符串1  =  字符串2 ]

             [  字符串1  !=  字符串2 ]

格式2:[  -z  字符串 ]

常用的测试操作符(先clear)

=:字符串内容相同

!=:字符串内容不同,! 号表示相反的意思

-z:字符串内容为空

逻辑测试

格式1:[  表达式1  ]  操作符  [  表达式2  ]  ...

格式2:命令1  操作符  命令2  ...

常用的测试操作符

-a或&&:逻辑与,“而且”的意思

-o或||:逻辑或,“或者”的意思

!:逻辑否

echo $LANG
[ $LANG !=  "en.US" ] && echo  "Not en.US"
read -p "是否覆盖现有文件(yes/no)?"  ACK
[ $ACK = "yes" ] && echo "覆盖"
echo $USER
[ $USER != "teacher" ]  &&  echo "Not teacher"

3、单分支if语句

判断挂载点目录,若不存在则自动创建

vi chkmountdir.sh
#!/bin/bash
MOUNT_DIR="/media/cdrom/"
if [ ! -d $MOUNT_DIR ]
then
    mkdir -p $MOUNT_DIR
fi
ls -ld /media/cdrom/
sh chkmountdir.sh
ls -ld /media/cdrom/

4、双分支if语句

判断目标主机是否存活,显示检测结果

vi  pinghost.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
    echo "Host $1 is up."
else
    echo "Host $1 is down."

5、多分支if语句

判断分数范围,分出优秀、合格、不合格三档

 vi gradediv.sh
#!/bin/bash
read -p "请输入您的分数(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
    echo "$GRADE 分!优秀"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
    echo "$GRADE 分,合格"
else
 echo "$GRADE 分?不合格"
fi

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
shell脚本中,-f和-z是两个常用的条件判断语句。 -f用于判断文件是否存在。如果指定的文件存在,则条件为真;如果文件不存在,则条件为假。例如,如果我们有一个文件/etc/sysconfig/network,并且我们想要在脚本中检查该文件是否存在,可以使用以下条件判断语句: ``` if [ -f /etc/sysconfig/network ]; then # 在这里写你的代码 fi ``` 这个条件判断语句会在/etc/sysconfig/network文件存在时执行其中的代码。 -z用于判断字符串是否为空。如果指定的字符串为空,则条件为真;如果字符串不为空,则条件为假。例如,如果我们有一个变量$HOSTNAME,并且我们想要在脚本中检查该变量是否为空,可以使用以下条件判断语句: ``` if [ -z "$HOSTNAME" ]; then # 在这里写你的代码 fi ``` 这个条件判断语句会在$HOSTNAME为空时执行其中的代码。 综合上述两个条件判断,如果我们想要检查$HOSTNAME是否为空或者为"(none)",可以使用以下条件判断语句: ``` if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then # 在这里写你的代码 fi ``` 这个条件判断语句会在$HOSTNAME为空或者为"(none)"时执行其中的代码。 需要注意的是,在条件判断语句中,`-o`表示逻辑或(or),`-a`表示逻辑与(and)。在这个例子中,我们使用了逻辑或(-o)来判断$HOSTNAME是否为空或者为"(none)"。如果要使用逻辑与,可以使用`-a`来替代`-o`。 另外,引用、和分别提供了关于如何使用这些条件判断语句的示例代码。通过这些示例代码,你可以更好地理解如何在实际的shell脚本中应用这些条件判断语句
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-覃玲秀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值