0
点赞
收藏
分享

微信扫一扫

Linux—shell脚本_文件测试、判断结构、for循环、循环控制

文件测试和判断语句

文件测试

  • [root@localhost ~]# ls 文件名
  • echo $? :输出0时,为文件存在。输出非0时则表示文件不存在。

测试结构:

第一种使用方式是直接使用test命令,格式:
test expression
第二种:[ expression ]
需要注意的是括号和表达式expression之间都有空格。推荐使用第二种方式。

文件测试符

Linux—shell脚本_文件测试、判断结构、for循环、循环控制_逻辑与

Linux—shell脚本_文件测试、判断结构、for循环、循环控制_for循环_02

字符串测试

  • shell中的字符串比较主要有等于、不等于、大于、小于、是否为空等测试。

字符串测试

说明

-n string

若string的长度不为0,则为真,否则为假

-z string

若string的长度为0,则为真,否则为假

string1 = string2

若string1等于string2,则为真,否则为假

string1 != string2

若string1不等于string2,则为真,否则为假

string1 > string2

若string1排在string2之前则为真,否则为假

string1 < strint2

若string1排在string2之后则为真,否则为假

整数比较

整数比较

比较符

说明

-gt

>

大于

-eq

==或=

等于

-ne

!=

不等于

-ge

>=

大于等于

-lt

<

小于

-le

<=

小于等于

逻辑测试符

  • 逻辑测试用于连接多个测试条件,并返回整个表达式的值。
  • 逻辑测试主要有逻辑非、逻辑与、逻辑或3种

# 非(!)、与(-a)、或(-o)

! expression	如果expression为真,则测试结果为假
expressionl -a expression2		expressionl和expression2同时为真,则测试结果为真
expression1 -O expression2		expressionl和expression2只要有一-个为真,则测试结果为真

  • 实例

# 逻辑非
[root@bzx ~]# [ ! -e /var/log/messages ]
[root@bzx ~]# echo $?
1

# 逻辑与
[root@sunday-test ~]# [ -e /var/log/messages -a -e /var/log/messages01 ]
[root@sunday-test ~]# echo $?
1

# 逻辑或
[root@sunday-test ~]# [ -e /var/log/messages -o -e /var/log/messages01 ]
[root@sunday-test ~]# echo $?
0

  • shell中的逻辑运算符,也有逻辑非、逻辑与、逻辑或 3种

!		逻辑非,对真假取反.
&&		逻辑与,连接两个表达式,只有两个表达式为真结果才为真
||		逻辑或,连接两个表达式,只要有一个表达式为真结果就为真

判断结构

if语句

  • if判断结构

if expression1;then
	command1
	command2
fi

  • if/else判断结构

if expression1;then
	command1
else
	command2
fi

  • if/elif/else判断结构

if expression1;then
	command1
elif expression2;then
	command2
elif expression3;then
	command3
fi

case语句

  • case判断结构

case VAR in
var1) command1 ;;
var2) command2 ;;
var3) command3 ;;
…
*) command4 ;;
esac

从上到下依次比较VAR和var1,var2,var3的值是否相等,如果匹配则执行后面的命令语句,都不匹配则匹配最后的默认*,执行后面的默认命令。

case判断结构中的 var1,var2,var3等值只能是常量或正则表达式。

for循环

for循环:是最常见的循环结构

  • for循环是一种运行前测试语句,也就是在运行任何循环体之前先要判断循环条件是否成立,只有在条件成立的情况下才会运行循环体,否则将退出循环。每完成一次循环后,在进行下一次循环之前都会再次进行测试。

1、带列表的for循环

用于执行一定次数的循环(循环次数等于列表元素个数),其语法结构如下:

for  VARIABLE  in  (list) 
do
                 command
done

  • 可以先定义变量,然后用变量替代列表
  • 列表也可以是数字:
  • 可以使用seq命令结合命令替换的方式生成列表。
  • 可以使用“步长”计算1到100的奇数和
  • 列表也可以是命令的输出

2、类C的for循环

格式如下:

for  ((expression1;  expression2; expression3))
do
           command
done

其中,expression1为初始化语句,一般用作变量定义和初始化;expression2为判断表达式,用于测试表达式返回值并以此控制循环,返回值为真则循环继续,返回值为假则退出循环;expression3用于变量值修改,从而影响expression2的返回值,并以此影响循环行为。

  • 还可以初始化多个值,例如:

[root@www shell-script]# cat c_for02.sh
#!/bin/bash
for ((i=1,j=100;i<=10;i++,j--))
do
echo "i=$i j=$j"
done

for的无限循环

#!/bin/bash
for ((i=0;i<1;i+=0))
do
     echo "infinite loop"
done

while循环

和for循环一样,while循环也是一种运行前测试语句,语法更简单:

while  expression
do
          command
done

首先while将测试expression的返回值,如果返回值为真则执行循环体,返回值为假则不执行循环。循环完成后进入下一次循环之前将再次测试。如果已知循环次数,可以用计数的方式控制循环,即设定一个计数器,在达到规定的循环次数后退出循环。例如:

  • 使用while按行读取文件按行读取文件是while的一个非常经典的用法,常用于处理格式化数据。例如有个文件如下:

[root@sunday-test shell-script]# cat student_info.txt
John    30     Boy
Sue     28     Girl
Wang    25     Boy
Xu      23     Girl
[root@sunday-test shell-script]# cat while03.sh
#!/bin/bash
cat student_info.txt | while read LINE
do
          NAME=`echo $LINE | awk '{print $1}'`
          AGE=`echo $LINE | awk '{print $2}'`
          Sex=`echo $LINE | awk '{print $3}'`
          echo "my name is $NAME,I'm $AGE years old, I'm a $Sex"
done

运行结果:

  • while死循环:
  • 方法1:

while   ((1))
do
     command
done

  • 方法2:

while  true
do
    command
done

  • 方法3:

while  :
do
     command
done

  • 可以利用while的无限循环实时的监控系统进程,以保证系统中的关键应用一直处于运行状态

循环控制

1、break语句

break用于终止当前整个循环体。一般都是和if判断语句一起使用,当if条件满足时使用break终止循环

使用for的嵌套打印九九乘法表:

[root@sunday-test shell-script]# cat break01.sh
#!/bin/bash
for ((i=1;i<=9;i++))
do
    for ((j=1;j<=9;j++))
       do
         if [ $j -le $i ]; then
            let "multi=$i * $j"
            echo -n "$i*$j=$multi "
         else
               break
         fi
      done
      echo
done

2、continue语句

continue语句用于结束当前循环转而进入下一次循环,注意:这是和break不同的地方,

continue并不会终止当前的整个循环体,它只是提前结束本次循环,而循环体还将继续执行;

而break则会结束整个循环体。

  • 例如:

[root@sunday-test shell-script]# cat continue01.sh
#!/bin/bash
for ((i=1;i<=100;i++))
do
if ! (($i%2));then
continue
fi
echo -n "$i "
done
echo
运行结果:
[root@sunday-test shell-script]# bash continue01.sh
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57
59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99

如果将continue换成break

[root@sunday-test shell-script]# cat continue02.sh
#!/bin/bash
for ((i=1;i<=100;i++))
do
if ! (($i%2));then
break
fi
echo -n "$i "
done
echo
运行结果则会为:
[root@sunday-test shell-script]# bash continue02.sh
1

举报

相关推荐

0 条评论