shell脚本-if,case,for,while知识点整理

一.判断

无论是if,case,for,while都会用到判断

格式

test [ 判断语句 ] 或简写成 [ 判断语句 ]

整数值判断符号

常用于if判断中,比如判断上一条命令是否执行成功[ $? -eq 0 ]

符号含义
-eq等于
-ne不等于
-gt大于
-ge大于等于
-lt小于
-le小于等于

字符串判断符号

一般用于用户输入内容与指定字符是否一致,或判断用户输入字符是否有问题

符号含义
==内容一样
!=内容不一样
-z字符串为空
-n字符串不为空
str1 > str2通过对应字符串的ASCII码进行比较,一般很少用
str1 < str2通过对应字符串的ASCII码进行比较,一般很少用

文件或目录的判断

符号含义
-e文件或目录存在为真
-r文件或目录存在且可读
-x文件或目录存在且可执行
-s文件或目录存在且内容非空为真
-d目录存在为真
-f文件存在且为普通文件为真
-c文件存在且为字符型特殊文件为真
-b文件存在且为块文件为真
file1 -nt file2file1比file2更新为真
file1 -ot file2file1比file2更旧为真
file1 -ef file2file1比file2为同一文件为真(inode一致,硬链接文件)

逻辑判断

一般用于两个或两个以上的条件进行筛选

符号含义
-a
-o
!

注意,该方式在 [ ]内用 -a/-o表示,如果是在括号外则用&&/ ||
如:
这是一个交换式脚本,会根据用户从标准输入输入的数字来显示结果

read -p "input your num:" NUM
[ $NUM -lt 0 ] &&echo "$NUM小于0"
[ $NUM -ge 0  -a  $NUM -le 100 ] && echo "$NUM在0到100之间" || echo "$NUM超过了100"

也可以写成

read -p "input your num:" NUM
[ $NUM -lt 0 ] &&echo "$NUM小于0"
[ $NUM -ge 0 ] && [ $NUM -le 100 ] && echo "$NUM在0到100之间" || echo "$NUM超过了100"

再举个例子:

#!/bin/bash
for i in {1..150}
do
        if [ $i -le 100 ] && [ $i -ge 50 ]
        then
                echo $i
        fi
done

#!/bin/bash
for i in {1..150}
do
        if [ $i -le 100 -a $i -ge 50 ]
        then
                echo $i
        fi
done

二.数学运算 expr

只能进行简单的整数运算

格式(在脚本中)

$(( $a + $b)) 或
$((a+b)) 或
$[ $a + $b ] 或
$(expr $a + $b) 或
`expr $a + $b`

#!/bin/bash
a=5
b=2
c=`expr $a + $b`
echo $c

还有一种比较特殊的格式"let"
在while循环中常用

i=1
sum=0
while (($i<= 100))
do
        sum=$[ $sum + $i ]
        let i++
done
echo $sum

注意,这里的 let i++ 还可以写成
let i+=1
i=$((i+1))
i=$($i+1)
i=$[$i+1]
i=`expr $i + 1`
i=$(expr $i + 1)
这里只要使用expr之后,运算符左右必须有空格,且变量必须用$。

运算符

符号作用
++递加
递减
+
-
/
*乘(注意在命令提示符下要加转译符号,在(()),[]中不需要)
%取余
>大于(注意同乘法)
<小于 (注意同减法)
比较符号比较符号
<小于
<=小于等于
>=大于等于
逻辑运算逻辑运算
&&
||
条件判断条件判断
int1>int2?1:0比较int1和int2大小,真输出1,假输出0
赋值运算赋值运算
==等于
+=加等
-=减等
*=乘等
/=除等
%=余等

备注

a++ 是先取a的值再加
++a 是先加再取a的值

浮点型运算

a=$(echo "scale=4;12.5 / 7" | bc)

三.seq获取数字列表

格式

seq 1 5

[root@deny_zou ~]# seq 1 5
1
2
3
4
5

seq -w 01 05

[root@deny_zou ~]# seq -w 1 05
01
02
03
04
05

seq 1 2 10

[root@deny_zou ~]# seq 1 2 10
1
3
5
7
9

四.if

几乎可以用于所有判断环境

if [ $i -le 100 ] && [ $i -ge 50 ]
then
      echo $i
fi

五.case

一般只能用于判断结果是固定值
在结果是固定值的情况,比if更好用,更方便

#!/bin/bash
read -p "input your choose yes/no:" CH
case $CH in
        "yes"|"y")
        echo "your choose is yes"
        ;;
        "no"|"n")
        echo "your choose is no"
        ;;
        *)
        echo "your write is wrong"
        ;;
esac

注意,这里|是正则表达式,同时也可以用[ ] 比如[0-9],但是只能匹配一个字符,如果超过,如[0-11],则匹配的内容为0,1,1

六.for

数字循环

for i in {5..10}
do
      echo $i
done

此方法,5和10不能用变量,但是此方法可以做累减操作

for i in $(seq 5 10)
do
        echo $i
done

此方法5和10都可以用变量,不能做累减操作,比如 $(seq 10 5),就会无法计数(这里$(seq 5 10)可以用`erq 5 10`代替)

for((i=5;i<=10;i++))
do
      echo $i
done

可10和5可以用变量,也可做递减操作,可简写为:

awk "BEGIN{for(i=5; i<=10; i++) print i}"

字符循环

LIST="a b c d"
for i in $LIST
do
          ehco $i
done

LIST为变量

for i in $*
do
    echo $i
done

预定义变量,执行脚本时,需在sh 脚本名 后追加 输入的参数,如 sh test.sh a b c d,也可以做数字循环

for i in a b c d
do
    echo $i
done

分别将a b c d显示出来

文件循环

for i in /var/log/*
do
     echo $i
done

显示的文件名包含了绝对路径

for i in $(ls /var/log)
do
     echo $i
done

只显示文件名

七.while

一般while的常用形式有这两种
形式一

i=1
sum=0
while [ $i -le 100 ]
do
      let sum=$sum+$i
      let i++
done
===============================================
注意和for循环的区别:
sum=0
for  i in `seq 1 100`
do
        sum=$sum+$i
done
echo $sum

形式二

i=1
sum=0
while (($i<= 100))
do
        sum=$[ $sum + $i ]
        let i++
done
echo $sum
====================================================
注意和for循环的区别:
sum=0
for ((i=1;i<=100;i++))
do
        sum=$[ $sum + $i ]
done
echo $sum

终结一下for和while的使用区别

1.for的累加累减在条件中,而while则是在do下面做

2.do下面的操作,for,while基本没有区别

3.for 可以用 `seq 1 100`或$(seq 1 100)做循环条件,while不能

4.while要得到一个数字列表,需要先在循环前定义变量的基础值,然后在while 条件中对变量进行限制,最后在do中,对变量进行具体操作,而for,只需要在条件中进行定义,for在这块更加灵活好用(for可以用((i=1;i<=100;i++)))

5.while用true和false做无限循环,而for是用for (( ; ; ))

八.循环控制语句

break

跳出整个循环

continue

跳出本次循环

备注下:
变量在定义的时候就已经执行,而函数是在引用的时候才执行,可以写一个调用当前系统时间的脚本来测试

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值