Shell学习之IF的使用

1.比较大小

1.1比较整数


if [ $A -gt $B ]; then
    echo "A > B"
else
    echo "A < B"
fi




if (( $a > $b )); then
    echo "a > b"
else
    echo "a < b"
fi


-eq


等于


[ $a -eq $b ]


(( $a == $b ))


-ne


不等于


[ $a -ne $b ]


(( $a != $b ))


-gt


大于


[ $a -gt $b ]


(( $a > $b ))


-ge


大于等于


[ $a -ge $b ]


(( $a >= $b ))


-lt


小于


[ $a -lt $b ]


(( $a < $b ))


-le


小于等于


[ $a -le $b ]


(( $a <= $b ))

Note:注意到等号两边各有一个空格,这是unix shell的要求

完成示例:

[[email protected] hrj]# cat test.sh

#!/bin/bash

a=$1;b=$2

echo "a=$a;b=$b"

if [ $a -gt $b ]; then

echo "a > b"

elif (( $a < $b )); then

echo "a < b"

else

echo "a = b"

fi

Note:对于整数比大小,建议使用-gt -lt等,如在输入非数字时,可报错。

为什么要建议此规范,我们再看一个例子:

[[email protected] hrj]# cat ./string.sh

#!/bin/bash

a=$1;b=$2

echo "a=$a;b=$b"

if [ "$a" = "$b" ]; then

echo "a = b"

else

echo "a != b"

fi

[[email protected] hrj]# ./string.sh hrj huangrenjie

a=hrj;b=huangrenjie

a != b

[[email protected] hrj]#

[[email protected] hrj]# ./string.sh hrj hrj

a=hrj;b=hrj

a = b

[[email protected] hrj]# ./string.sh 345 678

a=345;b=678

a != b

[[email protected] hrj]# ./string.sh 345 345

a=345;b=345

a = b

不知道你是否注意到没,这里输入数字和字符串均没有报错,而前面test.sh脚本一旦输入字符就会报错。这是因为输入数字时,string.sh脚本将345识别为字符串了。

1.2比较字符

[ -z STRING ] 如果STRING的长度为零则为真 ,即判断是否为空,空即是真;

[ -n STRING ] 如果STRING的长度非零则为真 ,即判断是否为非空,非空即是真;

[ STRING1 = STRING2 ] 如果两个字符串相同则为真; == 与 = 等价;个人建议使用==

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

[ STRING1 ] 如果字符串不为空则为真,与-n类似;

[[ STRING1 > STRING2 ]] 按a~z排序,STRING1在后;

[[ STRING1 < STRING2 ]] 反之;

注意:对于字符判断,变量一定要用双引号套起来。

示例1,判断字符串是否为空:

示例二,字符串比大小,注意如果是单括号里面,  > 需要被转义

 

示例三,字符串是否一样:

 

NOTE:等号在[[]]和[]里行为是不一样的,以下面为例。

 

 

1.3多条件

if [ 条件1 ] && [ 条件2 ]

if [ 条件1 ] || [ 条件2 ]

if [ 条件1  -a 条件2 ]

if [ 条件1  -o 条件2 ]

if [[ 条件1 && 条件2 ]]

if [[ 条件1 || 条件2 ]]

示例:

 

2.文件判断

可以参照test命令,运行命令man test查看。

示例:

[[email protected] hrj]# ls

file.sh  number.sh

[[email protected] hrj]# if [ -e /tmp/hrj/number.sh ]; then

> echo "file exists"

> else

> echo "file not exists"

> fi

file exists

[[email protected] hrj]#

微信关注

时间: 2024-08-11 05:44:39

Shell学习之IF的使用的相关文章

shell学习之tr命令

tr命令不接受指定的文件参数,而只是对标准输入进行翻译, tr是translate的简写,亦即翻译,需要注意的是,它不能翻译句子,只能翻译单个字符. 首先,定义变量:     [[email protected]]#A=1,,2,,,3,,,4,,,5 下面以示例对该命令以及其常用选项进行介绍. 示例: 1.  无选项设置情况     [[email protected]]# echo $A | tr  ',' ' '         1 2   3   4   5     [[email pr

【转】十分有用的linux shell学习总结

在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们 数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux Shell的系列博客就给予了我极大的帮助,然而在实际的使用中却发现,有的时候确实忘记了某个技术点或某个Shell命令的使用方式曾经在哪一篇博客中 予以了说明,所以不得不多次点击多篇博客,直到找到想要那篇的为止,鉴于此,为了方便我们每个人的查阅,这里特别给出了前十二篇系列博客的目录以供大家参 阅和查

shell学习总结之自定义函数

shell学习总结之自定义函数 Myfun (){ echo patams1 is $1 echo -n "now i is $i " ! [ "$i" ] && exit ; echo jj return '1' } myf=$(Myfun); echo myf Myfun 12 unset Myfun Myfun echo 'the end !'$myf 别人的 #! bin/bash # ----------------------------

第八章 shell学习之循环和结构化命令

for循环 1. 列表for循环 for variable in {list}  #有些像C++/CLR中的for each do ... done 如: 1. [[email protected] tmp]# cat b.sh #! /bin/bash for i in 1 2 3 4 5      #1 2 3 4 5等价于{1..5} do echo $i done [[email protected] tmp]# ./b.sh 1 2 3 4 5 2. [[email protected

Shell学习笔记——第三章

第三章 /etc/passwd 文件包含一个所有系统用户账户组成的列表,以及一些关于每个用户的基本信息. 例rich:x:501:Rich Blum:/home/rich:/bin/bash 每个条目都有7个数据字段,例使用冒号分隔.系统使用这些字段中的数据向用户分配具体的特性.这些字段分别有 用户名:用户密码(如果密码存储在其他文件中,则为占位符):用户的系统用户ID编号:用户的系统组的ID编号:用户的全名:用户默认的主目录:用户的默认Shell目录: cd 命令 略过 列表命令(ls) 参数

Shell学习之:输入输出重定向

详细理解: linux命令默认从标准输入设备(stdin)获取输入,将结果输出到标准输出设备(stdout)显示.一般情况下,标准输入设备就是键盘,标准输出设备就是终端,即显示器.在linux shell执行命令时,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件.由于文件描述符不容易记忆,shell同时也给出了相应的文件名: 文件描述符说明列表 文件 文件描述符 输入文件-标准输入 0(缺省为键盘;0为文件或其他命令的输出) 输出文件-标准输出 1(缺省为屏幕;1为文件) 错误

第三章 shell学习之正则表达式

正则表达式 \<the\>:精确匹配the,不包括包含the的单词 [^b-d]:不包含b~d a\{2\}:a出现2次 a\{2,3\}:a出现2~3次 a\{2,\}:a至少出现2次 [:upper:]:大写字母(用的时候外面加一层[]表示匹配字符集合) [:lower:]:小写字母 [:digit:]:数字 [:alnum:]:大小写字母和数字 [:space:]:表示空格或tab键 [:alpha:]:大小写字母 通配 注意通配和正则表达式不同,虽然有共同的符号 ls -l *.sh

第四章 shell学习之sed命令和awk编程

sed命令 sed只是对缓冲区中原始文件的副本进行编辑,不改变源文件,所以要保存则要重定向到另一个文件 sed三种方式: 1.sed [选项] 'sed命令' 输入文件 2.sed [选项] -f sed脚本文件 输入文件 3../sed脚本文件 输入文件 其中3的sed脚本文件要以#! bin/sed -f等开头 选项: -n 不打印所有行到标准输出,默认先打印匹配的再打印所有 -e 关联多个sed命令 -f 调用sed脚本文件 定位文本: x x为指定行号 x,y 从x到y行 /patter

第五章 shell学习之文件的排序、合并和分割

sort命令 sort [选项] [输入文件] 选项: -c 测试文件是否已经排序,如果未被排序则输出第一个未被排序的记录 -k 指定排序的域 -m 合并两个已排序的文件,合并的文件也已经排序,如sort -m a1 a2,a1的记录被有序的插入a2 -n 根据数字的大小进行排序,一般放在域号后,如-k3n -o 将输出重定向到指定文件 -r 将排序结果逆向显示 -t 改变域分割符,如-t: -u 去除结果中的重复行 sort和awk联合 例: [[email protected] tmp]#

第六章 shell学习之变量和引用

变量 本地变量:类似于局部变量,只在当前shell进程有效 环境变量:适用于所有登录进程所产生的子进程 位置参数:用于向shell脚本传递参数,只读 变量替换和赋值 引用变量值就称为变量替换,$就为变量替换符号,如a为变量名则$a或${a}为变量值 将值赋给某个变量名就称为变量赋值,格式:variable=value或${ variable=value },如值中包含空格则必须用"" 清除变量的值: unset 变量名 设置只读变量: variable=value readonly v