当前位置:首页 > CN2资讯 > 正文内容

linux if test用法 linux的if

1天前CN2资讯

一、if语句

1. 单分支if条件语句

格式:

  if [ 条件判断式 ] ;then

    程序

  fi

  或者

  if [ 条件判断式 ]

    then

      程序

  fi

注意:

  if语句以if开始,以fi结尾;[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格。then后面跟符合条件之后执行的程序,可以放在[]后面,用“;”分隔,也可以换行写入,此时不需要用“;”分隔。

  例如:编写一个脚本判断根分区的使用率

#!/bin/bash #2019-02-21 16:13 #统计根分区的使用率 #把根分区的使用率提取出来赋值给一个变量 rate=$(df -h | grep "/dev/sda3" | awk '{print $5}' | cut -d "%" -f 1) #判断使用率是否小于30,如果小于,则输出信息.-le代表是否小于等于 if [ $rate -le 30 ] then echo "根分区空间充足!!" fi

  

2. 双分支if条件语句

格式:

  if [ 条件判断式 ]

    then

      条件成立时,执行的程序

    else

      条件不成立时执行的程序

  fi

  例如:编写一个脚本来备份MySQL数据库

#!/bin/bash #写一个脚本用来备份mysql数据库,并测试双分支if条件语句 #日期:2019-02-21 #把当前时间按照年月日的形式赋值给变量datetime datetime=$(date +%Y-%m-%d) #首先判断备份文件的目录存在不存在,-d代表判断该目录是否存在 if [ -d /tmp/mysql_bak ] then echo $(date) "开始备份" &> /tmp/mysql_bak/dbbak.log mysqldump -u root -p'root@123' mysql > /tmp/mysql_bak/mysql_$datetime.sql 2>> /tmp/mysql_bak/dbbak.log size=$(du -sh /tmp/mysql_bak/mysql_$datetime.sql) &>> /tmp/mysql_bak/dbbak.log echo $(date) "备份结束,大小为$size" &>> /tmp/mysql_bak/dbbak.log else mkdir /tmp/mysql_bak echo $(date) "开始备份" &> /tmp/mysql_bak/dbbak.log mysqldump -u root -p'root@123' mysql > /tmp/mysql_bak/mysql_$datetime.sql 2>> /tmp/mysql_bak/dbbak.log size=$(du -sh /tmp/mysql_bak/mysql_$datetime.sql) &>> /tmp/mysql_bak/dbbak.log echo $(date) "备份结束,大小为$size" &>> /tmp/mysql_bak/dbbak.log fi

3. 多分支if条件语句

格式:

  if [ 条件判断式1 ]

    then

      当条件1成立时执行语句

  elif [ 条件判断式2 ]

    then

      当条件2成立时执行语句

  elif [ 条件判断式3 ]

    then

      当条件3成立时执行语句

  ......

  else 

    当所有条件都不成立时执行语句

  fi

  例如,让用户输入一个文件名,并判断该文件是什么文件

#!/bin/bash #判断用户输入的是什么文件 #接收用户输入的文件名,并把它赋予变量file read -p "Please input a filename: " file #接下来判断该变量是否为空,-z为判断字符串是否为空,如果为空则跳出循环 if [ -z "$file" ] then echo "错误!请输入一个文件名。" exit 1 #判断输入的文件是否存在,判断式中加入“!”,表示判断式取反。-e为判断文件是否存在,存在为真。 elif [ ! -e "$file" ] then echo "错误!你输入的文件不存在。" exit 2 #判断文件是否为普通文件 elif [ -f "$file" ] then echo "$file 是一个普通文件!" #判断文件是否为目录 elif [ -d "$file" ] then echo "$file 是一个目录!" else echo "$file 是一个特殊类型的文件!" fi

 二、case语句

格式:

  case $变量名 in

    值1)

      如果变量的值等于值1,则执行程序1

      ;;

    值2)

      如果变量的值等于值2,则执行程序2

      ;;

    值3)

      如果变量的值等于值3,则执行程序3

      ;;

    ......

    *)

      如果变量的值不是以上给出的所有值,则执行该程序

      ;;

  esac

注意:

  (1)case语句和if...elif...else语句一样都是多分支条件语句。不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系

  (2)case语句以case开头,以esac结尾;每个值必须以有括号“)”结束;每个程序段以双分号“;;”结束;最后的“*)”表示默认值,即当前面的所有值都无法匹配变量时,执行“*)”后面的程序段。

  (3)在匹配的值中,我们可以用方括号表示一个连续的范围,如[0-9],代表数字;使用竖杠符表示或。

  例如:让用户输入一个字符,并对该字符进行判断

#!/bin/bash #判断输入的字符是字母还是数字 read -p "请输入一个字符: " key #对变量进行判断 case $key in [0-9]) echo "你输入的是一个数字!" ;; [a-z]|[A-Z]) echo "你输入的是一个字母!" ;; *) echo "你输入的是一个特殊字符!" ;; esac

 三、for循环

格式一:变量列表形式

  for 变量 in 值1 值2 值3...

    do

      程序

    done

注意:此格式for关键字后面跟要进行循环的变量,in关键字后面跟变量的取值列表,即后面有几个值就循环几次,且每次循环变量都按照顺序依次获取值,然后执行do与done之间的程序段,直到变量获取变量列表的最后一个值并执行完程序段后,循环结束。

例1:进行一个简单的循环,依次打印1、2、3、4、5

#!/bin/bash #依次打印数字 for sum in 1 2 3 4 5 do echo $sum done

例2:批量修改文件后缀。我的/root/sh目录中有许多测试脚本,重新创建一个文件夹把sh目录下以.sh结尾的文件复制到文件夹里并修改成.txt的文件。

#!/bin/bash #批量修改文件后缀名 mkdir /tmp/for_text cp /root/sh/*.sh /tmp/for_text cd /tmp/for_text new=txt ls > ls.log for i in $(cat ls.log) do name=$(echo $i | cut -d . -f1) mv $i ${name}.$new done

 例3:批量压缩与加压缩文件。

#!/bin/bash #批量压缩与解压缩 mkdir /tmp/for1_text mkdir /tmp/for2_text cp /root/sh/*.sh /tmp/for1_text cd /tmp/for1_text houname=tar.gz ls > ls1.log for i in $(cat ls1.log) do tar -zcvf /tmp/for2_text/${i}.$houname $i &>> tar.log done cd /tmp/for2_text ls *.tar.gz > ls2.log for y in $(cat ls2.log) do tar -zxvf $y &> tar.log done

格式二:条件式形式

  for (( 变量初始值;循环控制条件;变量变化 ))

    do

      程序

    done

注意:for后面跟双小括号,在Linux是Shell中只有在双小括号中才可以进行加减乘除运算;在双小括号中,变量初始值、循环控制条件、变量变化以分号隔开;在Linux shell中不运行使用非整数类型的数作为循环变量。

例1:计算1到100的和

#!/bin/bash #计算1到100的和 s=0 for (( i=1;i<=100;i=i+1 )) do s=$(( $s + $i )) done echo "1到100的和等于:$s"

例2:批量添加用户

#!/bin/bash #批量添加用户并设置初始密码 read -t 30 -p "请输入添加用户的个数:" num read -t 30 -p "请输入初始密码值:" pass name=user #判断用户的输入是否为空值 if [ ! -z "$num" -a ! -z "$pass" ] then #判断用户输入的用户个数是否为数字 #把输入的num值中所有的数字都替换为空值,然后把剩下的值赋值给y y=$(echo $num | sed 's/[0-9]//g') #判断变量y是否为空值,若为空值,则变量num为数字 if [ -z "$y" ] then for (( i=1;i<=$num;i=i+1 )) do /usr/sbin/useradd $name$i echo $pass | /usr/bin/passwd --stdin "$name$i" done fi fi

 四、while循环和until循环

  1. while循环

格式:

  while [ 条件判断式 ]

    do

      程序

    done

注意:while循环是不定循环也称作条件循环。只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。

例1:使用while循环来计算1到100的和

#!/bin/bash #计算1到100的和 i=1 s=0 while [ $i -le 100 ] do s=$(( $s + $i )) i=$(( $i + 1 )) done echo $s

  2. until

格式:

  until [ 条件判断式 ]

    do

      程序

    done

注意:until循环和while循环相反,until循环是如果条件判断式不成立则进行循环,执行程序;一旦条件判断式成立,则终止循环。

例1:也是计算1到100的和

#!/bin/bash #计算1到100的和 s=0 i=1 until [ $i -gt 100 ] do s=$(( $s + $i )) i=$(( $i + 1 )) done echo $s

 

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/25422.html

    分享给朋友:

    “linux if test用法 linux的if” 的相关文章

    CN2到底是什么?如何计算它?

    在全球互联网通信中,CN2(ChinaNetNextGeneration)是一个众所周知的名字。它是中国电信推出的高端IP虚拟专网(VPN)业务,主要服务于对网络质量要求较高的用户,如跨国企业、金融公司以及需要稳定、高速国际访问的个人用户。CN2的出现,为中国用户提供了更高质量的国际互联网连接,同时...

    宝塔安装扩展不生效的解决方案与技巧

    在服务器管理的世界中,宝塔面板无疑是一款强大而受欢迎的工具。它让用户以更简单的方式进行服务器管理。通过宝塔,用户可以轻松管理网站、数据库和各种扩展。而PHPExcel等PHP扩展的安装显得尤为重要,因为它们提供了许多强大的功能,助力网站正常运行。 PHP扩展的重要性不言而喻。没有合适的扩展,网站可能...

    如何利用闲置VPS赚钱 - 探索多种盈利方式

    在互联网蓬勃发展的背景下,很多人手中会有闲置的VPS(虚拟私人服务器)。这些资源如果不加利用,往往就是一笔浪费。因此,了解闲置VPS赚钱的方法十分必要。这不仅可以让我们的小投资产生回报,也能为我们探索更广阔的网络世界提供平台。 闲置VPS的定义相对简单,指的是那些未被充分利用的服务器资源。它们通常具...

    解决BestTrace中的timestamp is error问题及优化网络性能指南

    BestTrace是一款强大的网络诊断工具,广泛用于追踪数据包从源头到目标的网络路径。它的工作原理结合了traceroute和ping的功能,让用户不仅能够查看每一跳的延迟,还能监测到丢包情况。这意味着,你在使用BestTrace时,能够获得关于网络连接质量的详细信息,及时发现潜在的问题。 在我实际...

    轻云互联:助力企业数字化转型的云计算解决方案

    轻云互联是隶属于广州轻云网络科技有限公司的云计算服务提供商。自成立以来,轻云互联专注于云计算领域,提供一系列全方位的一体化解决方案。这些解决方案涵盖了云计算产品、租用托管服务、云服务器、裸金属服务器、云虚拟主机以及游戏云服务等。走进轻云互联,你会发现这里不仅是一个技术创新的平台,更是一个通过边缘计算...

    选择野草云主机服务,享受高性价比与优质体验

    野草云是一家在2016年成立的主机服务提供商,由国人运营,专注于为中国大陆地区的用户提供优质的服务和产品。作为一家相对年轻的主机商,野草云力求用更贴近用户的方式来满足客户需求,特别是在国内市场需求快速增长的背景下,它的出现让很多用户找到了合适的主机选择。 说到野草云的历史背景,首先让我想起它在竞争激...