bash,if语句的参数

bash shell if 命令参数说明摘要本章我们会讨论在Bash脚本中使用条件,包含以下几个话题: if 语句使用命令的退出状态比较和测试输入和文件 if/then/else 结构if/then/elif/else 结构使用和测试位置参数嵌套 if 语句布尔表达式使用case 语句7.1. 介绍if7.1.1. 概要有时候你需要指定shell脚本中的依靠命令的成功与否来实施不同过程的行为。

if 结构允许你来指定这样的条件。

最精简的 if 命令的语法是:if TEST-COMMANDS; then CONSEQUENT-COMMANDS; fi TEST-COMMAND 执行后且它的返回状态是0,那么 CONSEQUENT-COMMANDS 就执行。

返回状态是最后一个命令的退出状态,或者当没有条件是真的话为0。

TEST-COMMAND 经常包括数字和字符串的比较测试,但是也可以是任何在成功时返回状态0或者失败时返回一些其他状态的一些命令。

一元表达式经常用于检查文件的状态。

如果对某个要素primaries, FILE 参数是 /dev/fd/N 这样的形式,那么就检查文件描述符“N”。

stdin, stdout 和 stderr 和他们各自的文件描述符也可以用于测试。

7.1.1.1. 和if使用的表达式下表包含了一个组成 TEST-COMMAND 命令或者命令列表,称作“要素primaries” 的概览。

这些primaries放置在方括号中来表示一个条件表达式的测试。

表 7.1. 主表达式Primary 意义[ -a FILE ] 如果 FILE 存在则为真。

[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。

[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。

[ -d FILE ] 如果 FILE 存在且是一个目录则为真。

[ -e FILE ] 如果 FILE 存在则为真。

[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。

[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。

[ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。

[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。

[ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。

[ -r FILE ] 如果 FILE 存在且是可读的则为真。

[ -s FILE ] 如果 FILE 存在且大小不为0则为真。

[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。

[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。

[ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。

[ -x FILE ] 如果 FILE 存在且是可执行的则为真。

[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。

[ -G FILE ] 如果 FILE 存在且属有效用户组则为真。

[ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。

[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read 则为真。

[ -S FILE ] 如果 FILE 存在且是一个套接字则为真。

[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1FILE2 does not则为真。

exists and [ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。

[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。

[ -o OPTIONNAME ] 如果 shell选项“OPTIONNAME” 开启则为真。

[ -z STRING ] “STRING” 的长度为零则为真。

[ -n STRING ] or [ STRING ] “STRING” 的长度为非零 non-zero则为真。

[ STRING1 == STRING2 ] 如果2个字符串相同。

“=” may be used instead of “==” for strict POSIX compliance则为真。

[ STRING1 != STRING2 ] 如果字符串不相等则为真。

[ STRING1 < STRING2 ] 如果“STRING1” sorts before “STRING2” lexicographically in the current locale则为真。

[ STRING1 > STRING2 ] 如果“STRING1” sorts after “STRING2”lexicographically in the current locale则为真。

[ ARG1 OP ARG2 ] “OP” is one of -eq, -ne, -lt, -le, -gt or -ge. These arithmetic binary operators return true if “ARG1” is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to “ARG2”, respectively. “ARG1” and “ARG2” are integers. 表达式可以借以下操作符组合起来,以降序列出:listed in decreasing order of precedence: 表 7.2. 组合表达式操作效果[ ! EXPR ] 如果 EXPR 是false则为真。

[ ( EXPR ) ] 返回 EXPR的值。

这样可以用来忽略正常的操作符优先级。

[ EXPR1 -a EXPR2 ] 如果 EXPR1 and EXPR2 全真则为真。

[ EXPR1 -o EXPR2 ] 如果 EXPR1 或者 EXPR2 为真则为真。

[ (或作 test) 内建命令对条件表达式使用一系列基于参数数量的规则来求值。

更多关于这个主题的信息可以在Bash文档中查找。

就像if 使用fi 来结束一样,在条件列完之后必须用">"来结束。

7.1.1.2. 后接then语句的命令 CONSEQUENT-COMMANDS 列出了跟在 then 语句后面可以是任何有效的UNIX命令,任何可执行的程序,任何可执行的shell脚本或者任何shell语句,除了 fi. 。

重要地记住 then 和 fi 在shell里面被认为是分开的语句。

因此,在命令行上使用的时候,他们用分号隔开。

在脚本中,if语句的不同部分通常是良好分隔的。

以下是一些简单的例子:7.1.1.3. 检查文件第一个例子检查一个文件是否存在: anny ~> cat msgcheck.sh #!/bin/bash echo "This scripts checks the existence of the messages file." echo "Checking..." if [ -f /var/log/messages ] then echo "/var/log/messages exists." fi echo echo "...done." anny ~> ./msgcheck.sh This scripts checks the existence of the messages file. Checking... /var/log/messages exists. ...done.7.1.1.4. 检查shell选项加入到你的Bash配置文件中去: # These lines will print a message if the noclobber option is set: if [ -o noclobber ] then echo "Your files are protected against accidental overwriting using redirection." fi 环境以上的例子将在命令行输入后开始工作: anny ~> if [ -o noclobber ] ; then echo ; echo "your files are protected against overwriting." ; echo ; fi your files are protected against overwriting. anny ~> 然而,如果你使用依赖环境的测试,当你在脚本中输入相同的命令你可能得到不用的结果,因为脚本会打开一个新的,没有设置预期的变量和选项的shell。

7.1.2. if的简单应用7.1.2.1. 测试退出状态 ? 变量包含了之前执行命令的退出状态(最近完成的前台进程)。

以下的例子显示了一个简单的测试: anny ~> if [ $? -eq 0 ] More input> then echo 'That was a good job!' More input> fi That was a good job! anny ~> 以下的例子证明了 TEST-COMMANDS 可以是任何有返回和退出状态的UNIX命令,之后 if 再次返回零的退出状态: anny ~> if ! grep $USER /etc/passwd More input> then echo "your user account is not managed locally"; fi your user account is not managed locally anny > echo $? 0 anny > 以下能得到同样的结果: anny > grep $USER /etc/passwd anny > if [ $? -ne 0 ] ; then echo "not a local account" ; fi not a local account anny >7.1.2.2. 数字的比较以下的例子是用了数值的比较: anny > num=`wc -l work.txt` anny > echo $num 201 anny > if [ "$num" -gt "150" ] More input> then echo ; echo "you've worked hard enough for today." More input> echo ; fi you've worked hard enough for today. anny > 这个脚本在每个星期天由cron来执行。

合集下载

bashshell(5):if,else,while大小比较

bashshell(5):if,else,while大小比较

bashshell(5):if,else,while⼤⼩⽐较1、if ;else 语句1、if的单分⽀语法格式:if条件判断;then语句1语句2……else语句1语句2……fi2、if的多分⽀语法格式:if条件判断;then语句1语句2……elif语句1语句2……elif语句1语句2……else语句1语句2……fi3.while 循环 while条件测试 do 执⾏命令 done4.until循环 until条件测试 do 执⾏命令 done注:1、elif 也可以有多个常⽤的判断语句:[ -f "somefile" ] :判断是否是⼀个⽂件[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执⾏权限[ -n "$var" ] :判断$var变量是否有值[ "$a" = "$b" ] :判断$a和$b是否相等-r file ⽤户可读为真-w file ⽤户可写为真-x file ⽤户可执⾏为真-f file ⽂件为正规⽂件为真-d file ⽂件为⽬录为真-c file ⽂件为字符特殊⽂件为真-b file ⽂件为块特殊⽂件为真-s file ⽂件⼤⼩⾮0时为真-t file 当⽂件描述符(默认为1)指定的设备为终端时为真常⽤的⽐较语句:含条件选择的shell脚本,对于不含变量的任务简单shell脚本⼀般能胜任。

但在执⾏⼀些决策任务时,就需要包含if/then的条件判断了。

shell脚本编程⽀持此类运算,包括⽐较运算、判断⽂件是否存在等。

基本的if条件命令选项有: - eq —⽐较两个参数是否相等(例如,if [ 2–eq 5 ])-eq —⽐较两个参数是否相等;就是 EQUAL 等于-ne —⽐较两个参数是否不相等;就是 NOT EQUAL不等于-lt —参数1是否⼩于参数2 ;就是 LESS THAN⼩于-le —参数1是否⼩于等于参数2 ;就是 LESS THAN OR EQUAL ⼩于等于-gt —参数1是否⼤于参数2 ;就是 GREATER THAN⼤于-ge —参数1是否⼤于等于参数2 ;就是 GREATER THAN OR EQUAL ⼤于等于-f — 检查某⽂件是否存在(例如,if [ -f "filename" ])-d — 检查⽬录是否存在⼏乎所有的判断都可以⽤这些⽐较运算符实现。

bash if 正则表达式

bash if 正则表达式

bash if 正则表达式bash if 正则表达式在 Bash 中,if语句是用来执行条件判断的关键字。

当条件表达式的返回值为真时,才会执行if语句中的命令。

正则表达式(Regular Expression)是在文本处理、搜索和替换中广泛应用的一种表达式语言。

在 Bash 中,我们可以使用正则表达式来执行复杂的文本匹配操作,从而实现更加高效的文本处理。

下面是一个使用Bash中if语句和正则表达式的例子:```bash#!/bin/bashread -p "请输入文件名:" filenameif [[ $filename =~ ^[A-Za-z0-9]+\.(txt|doc)$ ]]; thenecho "文件名合法"elseecho "文件名不合法"fi```在这个例子中,我们首先使用read命令从用户输入中获取一个文件名,然后使用if语句判断该文件名是否合法。

在if语句中,我们使用了双方括号[[]],这是Bash中的一种扩展语法,允许我们使用更加高级的条件表达式。

接着,我们使用正则表达式来匹配文件名。

正则表达式“^[A-Za-z0-9]+\.(txt|doc)$”表示以字母或数字开头,后面紧跟一个点,最后是txt或doc扩展名。

如果文件名符合这个正则表达式,就会执行echo命令输出“文件名合法”,否则输出“文件名不合法”。

总结在Bash中,if语句和正则表达式是常用的文本处理工具。

使用正则表达式可以大大简化文本匹配和替换的操作,提高处理效率。

同时,借助if语句,可以根据匹配结果执行不同的操作,实现更加灵活的文本处理。

shell if赋值参数

shell if赋值参数

shell if赋值参数
在Shell脚本中,你可以使用if语句进行条件判断。

if语句通常包含一个条件表达式和一个或多个代码块,根据条件表达式的值来执行相应的代码块。

当你在if语句中使用赋值参数时,你需要确保在使用参数之前已经对其进行了赋值。

下面是一个示例,演示了如何在if语句中使用赋值参数:
```bash
!/bin/bash
定义一个变量并赋值
my_variable="Hello"
使用if语句进行条件判断
if [ "$my_variable" = "Hello" ]; then
echo "变量值为Hello"
else
echo "变量值不是Hello"
fi
```
在上面的示例中,我们首先定义了一个变量`my_variable`并赋值为"Hello"。

然后,在if语句中,我们使用`"$my_variable"`来引用该变量的值,并使用`=`运算符进行比较。

如果变量的值等于"Hello",则执行if代码块中的语句;否则,执行else代码块中的语句。

注意,在使用参数时,我们需要将变量引用在双引号中,这样可以确保参数中的空格或特殊字符被正确处理。

同时,使用`[`和`]`来包围条件表达式,并在条件表达式之间使用空格进行分隔。

linux if 判断正则判断

linux if 判断正则判断

在Linux 中,您可以使用`if` 语句结合正则表达式进行判断。

这通常用于判断文件类型、权限等。

以下是一个示例,判断文件是否为文本文件:```bash#!/bin/bashfile="example.txt"if [[ -f "$file" ]]; thenecho "文件存在"elseecho "文件不存在"fiif [[ -r "$file" ]]; thenecho "文件可读"elseecho "文件不可读"fiif [[ -w "$file" ]]; thenecho "文件可写"elseecho "文件不可写"fiif [[ -x "$file" ]]; thenecho "文件可执行"elseecho "文件不可执行"fi```在这个示例中,我们使用了`-f`、`-r`、`-w` 和`-x` 参数来判断文件的类型和权限。

这些参数与正则表达式结合,可以用于判断文件是否满足特定条件。

此外,您还可以使用`grep` 命令结合正则表达式来判断文件内容。

例如,判断文件是否包含特定字符串:```bashif grep -q "特定字符串" "$file"; thenecho "文件包含特定字符串"elseecho "文件不包含特定字符串"fi```在这个示例中,我们使用了`grep` 命令的`-q` 选项,它会在不输出匹配行的情况下退出。

这可以确保只有当文件包含特定字符串时,才会输出相应的提示信息。

bash if条件语句

bash if条件语句
bash if 条件语句
在 Bash 脚本中,if 条件语句用于基于特定条件执行不同的操作。以下是一个基 本的 if 条件语句的语法:
if [ 条件 ] then
# 执行语句 elif [ 条件 ] then
# 执行语句 else
# 执行语句 fi
在上面的语法中,条件是你要测试的条件表达式。你可以使用各种比较操作符来 检查文件、字符串或数字。以下是一些示例:
1. 检查两个数字是否相等:
if [ $num1 -eq $num2 ] then
echo "两个数字相等" fi
2. 检查两个字Байду номын сангаас串是否相等:
if [ "$str1" = "$str2" ] then
echo "两个字符串相等" fi
3. 检查文件是否存在:
if [ -f "filename" ] then
echo "文件存在" fi
4. 使用逻辑运算符(-a 或&&表示逻辑与,-o 或||表示逻辑或):
if [ $num1 -gt 10 -a $num2 -lt 20 ] then
echo "num1 大于 10 且 num2 小于 20" fi

BashShell中命令行选项参数处理

BashShell中命令行选项参数处理

BashShell中命令⾏选项参数处理0.引⾔写程序的时候经常要处理命令⾏参数,本⽂描述在Bash下的命令⾏处理⽅式。

选项与参数:如下⼀个命令⾏:./test.sh -f config.conf -v --prefix=/home我们称-f为选项,它需要⼀个参数,即config.conf, -v 也是⼀个选项,但它不需要参数。

--prefix我们称之为⼀个长选项,即选项本⾝多于⼀个字符,它也需要⼀个参数,⽤等号连接,当然等号不是必须的,/home可以直接写在--prefix后⾯,即--prefix/home,更多的限制后⾯具体会讲到。

在bash中,可以⽤以下三种⽅式来处理命令⾏参数,每种⽅式都有⾃⼰的应⽤场景。

* ⼿⼯处理⽅式* getopts* getopt下⾯我们依次讨论这三种处理⽅式。

1. ⼿⼯处理⽅式在⼿⼯处理⽅式中,⾸先要知道⼏个变量,还是以上⾯的命令⾏为例:* $0 : ./test.sh,即命令本⾝,相当于C/C++中的argv[0]* $1 : -f,第⼀个参数.* $2 : config.conf* $3, $4 ... :类推。

* $# 参数的个数,不包括命令本⾝,上例中$#为4.* $@ :参数本⾝的列表,也不包括命令本⾝,如上例为 -f config.conf -v --prefix=/home* $* :和$@相同,但"$*" 和 "$@"(加引号)并不同,"$*"将所有的参数解释成⼀个字符串,⽽"$@"是⼀个参数数组。

如下例所⽰:1 #!/bin/bash23for arg in"$*"4do5 echo $arg6 done78for arg in"$@"9do10 echo $arg11 done12执⾏./test.sh -f config.conf -n 10 会打印:-f config.conf -n 10 #这是"$*"的输出-f #以下为$@的输出config.conf-n10所以,⼿⼯处理的⽅式即对这些变量的处理。

shell if判断语句

shell if判断语句Shell作为一种Unix/Linus下的基本命令解释器和脚本语言,其if判断语句的用法是相当重要的。

if判断语句可以让我们在编写Shell脚本时,更加灵活地控制程序的执行流程。

本文将对Shell if 判断语句进行详细的介绍。

一、if语句的基本用法if语句用于判断某个条件是否成立,如果条件成立,就执行某些操作。

if语句的基本语法如下:```bashif [ condition ]thencommand1command2......fi```其中,square bracket中的“condition”是待判断的逻辑条件,可以是各种操作符连接的表达式,包括:- 比较操作符,如 -eq、-ne、-lt、-le、-gt、-ge等;- 布尔操作符,如 !、&&、||等;- 文件测试操作符,如 -f、-d、-e等;当condition成立时,执行then下的命令;否则跳过then块,执行if语句之后的命令。

例如,如下代码将会输出“hello”:```bashif [ 1 -eq 1 ]thenecho "hello"fi```二、if-else语句if-else语句用于在判断条件成立或不成立时执行不同的代码块。

if-else语句的基本语法如下:```bashif [ condition ]thencommand1command2......elsecommand3command4......fi```当条件condition成立时,执行then下的命令;否则执行else 下的命令。

例如:```bashif [ $(date +%u) -lt 6 ]thenecho "今天是工作日"elseecho "今天是周末"fi```以上代码判断当前是否是工作日,如果是则输出“今天是工作日”,否则输出“今天是周末”。

三、if-elif-else语句if-elif-else语句是在判断条件有多种情况时使用的,用于判断不同的条件成立时执行不同的代码块。

shell 检查参数

shell 检查参数
在shell脚本中,经常需要检查传递给脚本的参数是否符合要求。

下面是一些常见的参数检查方法:
1. 检查参数数量:可以使用 $# 变量来获取传递给脚本的参数
数量,然后判断是否符合要求。

2. 检查参数格式:可以使用正则表达式来检查参数格式是否正确。

例如,需要检查一个参数是否为数字,可以使用如下代码:
```bash
if [[ $1 =~ ^[0-9]+$ ]]; then
echo '参数为数字'
else
echo '参数不是数字'
fi
```
3. 检查参数是否存在:可以使用条件语句来检查某个参数是否
存在。

例如,需要检查第二个参数是否存在,可以使用如下代码:
```bash
if [ -z '$2' ]; then
echo '第二个参数不存在'
else
echo '第二个参数为 $2'
fi
```
4. 检查参数是否合法:有时需要检查某个参数是否在一个合法的列表中。

可以使用 case 语句来实现。

例如,需要检查第一个参数是否为“start”或“stop”,可以使用如下代码:
```bash
case $1 in
start)
echo '启动服务'
;;
stop)
echo '停止服务'
;;
*)
echo '参数不合法'
;;
esac
```
以上是一些常见的 shell 参数检查方法,可以根据需要进行选择和组合。

bash if 语法

bash if 语法Bash语言是Linux或UNIX系统的标准shell语言。

if语句是Bash中最重要也是最常用的流程控制语句之一。

本文将简要介绍Bash if语法。

1. 基本if语法if语句用于测试条件并执行特定的操作。

if语句的基本语法如下:if [ expression ]then# 执行操作fi其中,方括号括起来的部分是条件,expression是一些条件语句,例如比较表达式,逻辑表达式等。

then和fi是保留关键字,then表示条件满足时要执行的操作,fi表示if语句的结束。

注意,在Bash 语言中,if语句的执行结果是最后一条被执行的命令的退出状态值。

2. 带有else语句的if语法if语句还可以带有else语句,表示条件不满足时要执行的操作。

语法如下:if [ expression ]then# 满足条件时执行的操作else# 不满足条件时执行的操作fi其中,else表示不满足条件时要执行的命令块。

3. elif语句elif语法允许在if条件语句中添加多个条件语句,类似于多个if语句的组合。

当条件一一检查时,只要有一个条件满足,后面的条件也不再检查。

elif的使用格式如下所示:if [ expression1 ]then# 满足条件1时执行的操作elif [ expression2 ]then# 满足条件2时执行的操作elif [ expression3 ]then# 满足条件3时执行的操作else# 所有条件都不满足时执行的操作fi4. case语句case语句是一种更高级的if语句,用于测试值与范围。

它将可选的值列表与一组命令相关联,以便根据选择情况执行一个或多个命令。

语法如下:case expression inpattern1 )# 对于pattern1执行的命令;;pattern2 )# 对于pattern2执行的命令;;* )# 对于其他情况执行的默认命令块;;esac在此语法中,expression是要匹配的表达式,模式列表列出了所有要测试的模式。

shell if语句 写法

在 Shell 脚本中,if 语句用于执行基于条件的分支控制。

它允许你根据条件的真假
执行不同的代码块。

下面是 Shell 脚本中 if 语句的常见写法:
在上面的代码中,condition是一个条件表达式,它可以是比较表达式、字符串表达
式或其他 Shell 支持的条件。

在 if 语句中,如果condition为 true,则执行语句块1,否则执行语句块2。

注意,then和else后面的代码块需要以关键字fi结束。

下面是一个具体的例子:
上面的例子中,-eq是一个用于比较数字相等性的运算符。

在 if 语句中,如果变量num的值等于 10,则输出 "Number is 10",否则输出 "Number is not 10"。

此外,你还可以使用其他比较运算符和逻辑运算符来构建复杂的条件表达式。

例如,-lt表示小于,-gt表示大于,-le表示小于等于,-ge表示大于等于,-ne表示不等于。

你还可以使用逻辑运算符&&表示逻辑与,||表示逻辑或,!表示逻辑非。

通过合理利用 if 语句,你可以根据特定条件在 Shell 脚本中执行不同的操作,从而
实现更复杂的逻辑控制和脚本执行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档