linux shell学习笔记(二)
2010-07-25 by zhiwei
接上篇日志:linux shell学习笔记(一)
这篇日志主要写shell中的控制语句,有两种判断语句,if语句和case语句,学过C语言的同学一定不会陌生,很简单的用法。
七、shell中的控制判断语句
1. if语句
原型一
1 2 3 | if 测试条件 then 语句1 fi |
原型二
1 2 3 4 | if 测试条件 then 语句1 else 语句2 fi |
原型三
1 2 3 4 5 6 | if 测试条件1 then 语句1 elif 测试条件2 then 语句2 else 语句3 fi |
在if语句中一个重要的环节是编写测试条件,也就是程序执行的判断条件。if语句中可以将命令执行结果当作测试条件。例如:若命令正常结束,则表示测试成功,其返回值为0,条件测试为真;否则条件测试为假。测试条件编写一般有以下3种形式:
(1). 用test命令
(2). 用方括号把测试条件括起来。
(3). 采用[[条件表达式]]方式,条件表达式用来测试文件的属性和进行字符串比较。
test命令原型如下:
test 表达式
test一般与系统运算搭配起来使用,它可以与如下四类运算符共同使用。
第一类:字符测试运算符
字符测试运算符的作用是用于测试字符串操作的返回值,具体参数如下:
-z str1 :如果字符串str1的长度为0,则测试条件为真
-n str1 :如果字符串str1的长度大于0,则测试条件为真
str1 :如果字符串str1不是空串,则测试条件为真
str1 = str2 :如果字符串str1等于字符串str2,则测试条件为真
str1 != str2 :如果字符串str1不等于字符串str2,则测试条件为真
str1 > str2 :如果按字典顺序字符串str1排在str2之后,则测试条件为真
str1 < str2 :如果按字典顺序字符串str1排在str2之前,则测试条件为真
注:=、!=、<、>,这些符号在使用时两边要加空格
例:
1 2 3 4 5 6 7 8 9 | #!/bin/bash echo "input your address:" read address if address then echo "your address is: "$address else echo "your address is null" fi |
以上程序意思是用户输入一字符串,如果输入字符串长度大于0,则输出用户输入的字符串,否则输出空。
第二类:数值测试运算符
数值测试运算符主要用于数值运算时的判断,具体参数如下:
num1 -eq num2 :如果整数num1等于num2,则测试条件为真
num1 -ne num2 :如果整数num1不等于num2,则测试条件为真
num1 -lt num2 :如果整数num1小于num2,则测试条件为真
num1 -le num2 :如果整数num1小于或等于num2,则测试条件为真
num1 -gt num2 :如果整数num1大于num2,则测试条件为真
num1 -ge num2 :如果整数num1大于或等于num2,则测试条件为真
第三类:逻辑运算符
逻辑运算符用于逻辑语句的判断,常用的逻辑运算符如下:
! :逻辑“非”,放在任意逻辑表达式的前面,全原来为真的表达式为假,原来为假的表达式为真
-a :逻辑“与”,放在两个逻辑表达式之间,表示只有两个表达式都为真时,结果才为真
-o :逻辑“或”,放在两个逻辑表达式之间,表示只有两个表达式都为假时,结果才为假
() :圆括号可以把逻辑表达式括起来,使用之成为一个整体,优先进行运算
注:逻辑表达式中运算符的优先关系如下:”()”>”!”>”-a”>”-o”。
第四类:文件运算符
文件运算符用于测试文件或目录的操作,常用文件运算符如下:
-r 文件名:若文件存在并且是用户可读的,则测试条件为真
-w 文件名:若文件存在并且是用户可写的,则测试条件为真
-x 文件名:若文件存在并且是用户可执行的,则测试条件为真
-f 文件名:若文件存在并且是普通文件,则测试条件为真
-d 文件名:若文件存在并且是目录文件,则测试条件为真
-p 文件名:若文件存在并且是命名的FIFO文件,则测试条件为真
-b 文件名:若文件存在并且是块设备文件,则测试条件为真
-c 文件名:若文件存在并且是字符设备文件,则测试条件为真
-s 文件名:若文件存在并且长度大于0,则测试条件为真
-t 文件描述字:若文件被打开并且文件描述字是与终端设备相关的,则测试条件为真,默认的文件描述字是1。
2. case语句
case语句是一种多重判断语句,类似于多个if elif语句,其原型如下:
1 2 3 4 5 6 | case 字符串 in 模式表达式1) 语句1;; 模式表达式2) 语句2;; 模式表达式3) 语句3;; ... esac |
case语句执行原理是将字符串与各个模式串顺次匹配,若满足则执行,否则继续查找,如果没有匹配成功的,则不执行任何语句,直接退出。
注:每个模式处理语句是以”;;”两个分号结束的,模式表达式应该唯一,一个模式表达式可以含有多个模式串,但它们之间要用”|”隔开。
例:
© 2010, chenzhiwei.net. 版权所有.
本文永久链接:http://chenzhiwei.net/2010/07/linux-shell-study-notes-part-2/
本文短网址:http://chenzhiwei.net/?p=30318
又来了,补充一下 if语句 在[] 中的条件 两边都要有空格 if [ -z $str ]