Bash 条件表达式的6 个示例 (-e, -eq, -z,..)
Bash 表达式是用于形成 bash 条件语句的运算符、特征或值的组合。条件表达式可以是二进制或一元表达式,涉及数字、字符串或任何成功时返回状态为零的命令。
有几个条件表达式可用于测试文件。以下是一些有用的条件表达式。
- [ -e filepath ] 如果文件存在,则返回 true。
- [ -x filepath ] 如果文件存在且可执行,则返回 true。
- [ -S filepath ] 如果文件存在并且它是一个套接字文件,则返回 true。
- [ expr1 -a expr2 ] 如果两个表达式都为真,则返回真。
- [ expr1 -o expr2 ] 如果表达式 1 或 2 中的任何一个为真,则返回真。
Bash 示例 1. 检查文件是否存在
以下 Bash shell 脚本代码片段获取文件名及其绝对路径,并检查文件是否存在并抛出适当的信息。
$ cat exist.sh
#! /bin/bash
file=$1
if [ -e $file ]
then
echo -e "File $file exists"
else
echo -e "File $file doesnt exists"
fi
$ ./exist.sh /usr/bin/boot.ini
File /usr/bin/boot.ini exists
请参阅之前的文章以了解各种bash if 语句类型。
Bash 示例 2. 比较数字
下面的脚本从用户那里读取两个整数,并检查这两个数字是否相等或大于或小于彼此。
$ cat numbers.sh
#!/bin/bash
echo "Please enter first number"
read first
echo "Please enter second number"
read second
if [ $first -eq 0 ] && [ $second -eq 0 ]
then
echo "Num1 and Num2 are zero"
elif [ $first -eq $second ]
then
echo "Both Values are equal"
elif [ $first -gt $second ]
then
echo "$first is greater than $second"
else
echo "$first is lesser than $second"
fi
$ ./numbers.sh
Please enter first number
1
Please enter second number
1
Both Values are equal
$ ./numbers.sh
Please enter first number
3
Please enter second number
12
3 is lesser than 12
Bash 示例 3. 基本算术计算器
此示例读取输入,这是一种要对 bash 变量(inp1 和 inp2)执行的算术运算。算术运算可以是加法、减法或乘法。
$ cat calculator.sh
#!/bin/bash
inp1=12
inp2=11
echo "1. Addition"
echo "2. Subtraction"
echo "3. Multiplication"
echo -n "Please choose a word [1,2 or 3]? "
read oper
if [ $oper -eq 1 ]
then
echo "Addition Result " $(($inp1 + $inp2))
else
if [ $oper -eq 2 ]
then
echo "Subtraction Result " $(($inp1 - $inp2))
else
if [ $oper -eq 3 ]
then
echo "Multiplication Result " $(($inp1 * $inp2))
else
echo "Invalid input"
fi
fi
fi
$ ./calculator.sh
1. Addition
2. Subtraction
3. Multiplication
Please choose a word [1,2 or 3]? 4
Invalid input
Bash 示例 4. 读取和 Ping IP 地址
以下脚本用于读取 IP 地址并检查 IP 地址是否可达,并打印相应的消息。
$ cat ipaddr.sh
#!/bin/bash
echo "Enter the Ipaddress"
read ip
if [ ! -z $ip ]
then
ping -c 1 $ip
if [ $? -eq 0 ] ; then
echo "Machine is giving ping response"
else
echo "Machine is not pinging"
fi
else
echo "IP Address is empty"
fi
$ ./ipaddr.sh
Enter the Ipaddress
10.176.191.106
Pinging 10.176.191.106 with 32 bytes of data:
Reply from 10.176.191.106: bytes=32 time<1ms TTL=128
Ping statistics for 10.176.191.106:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
Machine is giving ping response
在此示例中,如果 ipaddress 的长度为零,则 -z 返回 true,如果条件前面有 ! (negate) 运算符,如果表达式为假,则进入 if 部分执行。所以当IP地址不为空时,它进入并检查该IP地址是否可达。
Bash 示例 5. 安装程序脚本
大多数软件包的安装程序脚本不允许以 root 用户身份执行。脚本检查正在执行的用户并抛出错误。
以下脚本仅在执行的用户不是 root 时才允许您执行 oracle 安装程序脚本。
$ cat preinstaller.sh
#!/bin/bash
if [ `whoami` != 'root' ]; then
echo "Executing the installer script"
./home/oracle/databases/runInstaller.sh
else
echo "Root is not allowed to execute the installer script"
fi
Executing the script as a root user,
# ./preinstaller.sh
Root is not allowed to execute the installer script
在此示例中,命令 whoami 的输出与单词“root”进行比较。对于字符串比较 ==, !=, < 应该使用 and 对于数值比较 eq, ne,lt 和 gt 应该使用。
Bash 示例 6. 增强的括号
在上述所有示例中,我们仅使用单括号来包围条件表达式,但 bash 允许使用双括号,作为单括号语法的增强版本。
$ cat enhanced.sh
#!/bin/bash
echo "Enter the string"
read str
if [[ $str == *condition* ]]
then
echo "String "$str has the word \"condition\"
fi
$ ./enhanced.sh
Enter the string
conditionalstatement
String conditionalstatement has the word "condition"
- [ 是测试命令的同义词。即使它内置在 shell 中,它也会创建一个新进程。
- [[ 是它的新改进版,是关键字,不是程序。
- [[ Korn 和 Bash 理解。
- 在上面的示例中,如果变量 $str 在任何地方都包含短语“条件”,则条件为真。
- 这是shell globbing 功能,仅当您使用[[(双括号)时才支持该功能,因此不需要引用许多参数。
- 点赞
- 收藏
- 关注作者
评论(0)