02: shell中的if、case、for等语句

1.1 shell中常用运算符

运算符 描述 示例
文件比较运算符
-e filename 如果 filename 存在,则为真 [ -e /var/log/syslog ]
-d filename 如果 filename 为目录,则为真 [ -d /tmp/mydir ]
-f filename 如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果 filename 为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果 filename 可读,则为真 [ -r /var/log/syslog ]
-w filename 如果 filename 可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果 filename 可执行,则为真 [ -L /usr/bin/grep ]
filename1 -nt filename2 如果 filename1 比 filename2 新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2 如果 filename1 比 filename2 旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 如果 string 长度为零,则为真 [ -z "$myvar" ]
-n string 如果 string 长度非零,则为真 [ -n "$myvar" ]
string1 = string2 如果 string1 与 string2 相同,则为真 [ "$myvar" = "one two three" ]
string1 != string2 如果 string1 与 string2 不同,则为真 [ "$myvar" != "one two three" ]
算术比较运算符
num1 -eq num2 等于 [ 3 -eq $mynum ]
num1 -ne num2 不等于 [ 3 -ne $mynum ]
num1 -lt num2 小于 [ 3 -lt $mynum ]
num1 -le num2 小于或等于 [ 3 -le $mynum ]
num1 -gt num2 大于 [ 3 -gt $mynum ]
num1 -ge num2 大于或等于 [ 3 -ge $mynum ]

1.2 使用if条件语句

  1、单分支if语句

#!/bin/bash
MOUNT_DIR="/media/cdrom"
if [ ! -d $MOUNT_DIR ]
then
   mkdir -p $MOUNT_DIR
fi

判断是否存在/media/cdrom目录,如果没有就创建

#!/bin/bash
if [ "$USER" != "root" ]
then
   echo "错误:非root用户,权限不足!"
   exit 1
fi
fdisk -l /dev/sda

是root用户执行命令、不是root用户直接退出

  2、双分支if语句应用

#!/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."
fi

使用ping测试网络连通性

    [[email protected] ~]# chmod +x pinghost.sh
    [[email protected] ~]# ./pinghost.sh 192.168.10.10
    Host 192.168.10.10 is up.
    [[email protected] ~]# ./pinghost.sh 192.168.10.1
    Host 192.168.10.1 is down.

  3、多分支if语句应用

#!/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

多分支if语句应用

1.3 shell 中的for循环

  1、根据姓名列表批量的添加用户

    1)创建用户的列表文件
        [[email protected] ~]# vim /root/users.txt
        zhangsan
        lisi
        wangwu
    2)编辑批量添加用户的脚本
        [[email protected] ~]# vim uaddfor.sh
        #!/bin/bash
        ULIST=$(cat /root/users.txt)
        for UNAME in $ULIST
        do
        useradd $UNAME
        echo "123456" | passwd --stdin $UNAME &>/dev/null
        done

        [[email protected] ~]# ./uaddfor.sh
        [[email protected] ~]#  tail -3 /etc/passwd

原文地址:https://www.cnblogs.com/xiaonq/p/8476905.html

时间: 2024-08-21 10:45:47

02: shell中的if、case、for等语句的相关文章

Shell中的条件测试和循环语句

条件测试 1. 条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假, 则命令的Exit Status为1(注意与C语?言的逻辑表?示正好相反).例如测试两个数的大小关系: 虽然看起来很奇怪,但左方括号[确实是一个命令的名字,传给命令的各参数之间应该?空格隔开,比如,$VAR.-gt.3.]是[命令的四个参数,它们之间必须?空格隔开.命令test或[的参数形式是相同的,只不过test命令不需要]参数.以[命令为

C Shell中的变量数组

今天刚刚在看一点C Shell的内容,发现一个挺好玩的东西!就是环境变量可以像数组那样来设置!具体设置语法如下: set variable=(element1 element2 ...) //注意元素之间用空格来间隔 比如我在C Shell中运行了这么一条语句 set var=(123 def hij),那么他就表示设定了一个变量数组,其中var[1]是123,var[2]是def!很奇怪的是它这个数组不是从0开始的,var[0]是一个空的字符串!或许这个var[0]像C语言主函数的argv[0

九、while 条件循环语句、case 条件测试语句、计划任务服务程序

4.3.3 while条件循环语句 while条件循环语句是一种让脚本根据某些条件来重复执行命令的语句,它的循环结构往往在执行前并不确定最终执行的次数,完全不同于for循环语句中有目标.有范围的使用场景.while循环语句通过判断条件测试的真假来决定是否继续执行命令,若条件为真就继续执行,为假就结束循环.while语句的语法格式如图4-21所示. 图4-21  while循环语句的语法格式 接下来结合使用多分支的if条件测试语句与while条件循环语句,编写一个用来猜测数值大小的脚本Guess.

(九)shell中case语句、程序传参、while

2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中的switch case不同.shell中的case默认就是匹配上哪个执行哪个,不会说执行完了还去执行后面的其他case(就好像shell中的case语言默认都带了break). 2.2.6.2.调用shell程序的传参(1)C语言中可以通过main函数的argc和argv给程序传参(详情参考<4.

shell脚本中if与case使用,查找文件locate与find的使用,压缩,解压及归档工具

shell脚本中if与case使用 查找文件locate与find的使用 压缩,解压及归档工具 执行的循序  顺序执行  选择执行  循环执行 条件语句if if只是一个有含义的词,不能单独作为指令使用. 单分支 if 条件判断:then 条件为真的分支代码 fi 双分支 if 判断条件:then 条件为真的分支代码 else 条件为假的分支代码 fi 多分支 if 判断条件1, if-true elif 判断条件2,then if-ture elif 判断条件3,then if-ture ..

shell中的case语句

shell中case语法如下: case word in pattern1) Statement(s) to be execute if pattern1 matchs ;; pattern2) Statement(s) to be execute if pattern2 matchs ;; pattern3) Statement(s) to be execute if pattern3 matchs ;; *) Default action ;; esac [注]pattern模式不能包含元字

Linux下shell中case命令详解(常规的break、无条件继续和有条件继续)

linux下shell中的case名字和C/C++中的switch类似,但是shell中的case更强大和复杂. 1.强大主要体现在:shell中case中的关键字可以是字符串类型,而每一项中可以包含正则表达式. 2.复杂主要体现在:shell中case的每一个项后有三个选择:break(常规的break).unconditional follow up(无条件继续)和conditional follow up(有条件继续). 这篇文章的重点是上面的第2点. case的无条件继续和有条件继续是b

SHELL中的case流程控制

case流控制: case结构用于多种情况的条件判断.类似于其他编程语言中的switch/case语句,但从语法形式上讲,有很大的不同. case 字符串 in 模式) 语句 ;; 模式2 | 模式3) 语句 ;; *) 默认执行的 语句 ;; esac 提示:esac就是case反过来写. break和continue break命令允许跳出循环.break通常在进行一些处理后退出循环或case语句.如果是在一 个嵌入循环里,可以指定跳出的循环个数.例如如果在两层循环内,用break 2刚好跳

shell中的大括号和小括号

一.小括号,园括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格. ②命令替换.等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令.有些shell不支持,如tcsh. ③用于初始化数组.如:array=(a b c d) 2.双小括号 (( ))