在这里插入代码片
个val = expr 2 + 2因为val与=之间有空格,导致出错!
运算符 说明 举例
-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
-ne 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。
#!/bin/bash
a=10
b=20
关系运算符
if [ $a -eq $b ]
then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
echo "$a -ne $b: a 不等于 b"
else
echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
echo "$a -gt $b: a 大于 b"
else
echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
echo "$a -lt $b: a 小于 b"
else
echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
echo "$a -ge $b: a 大于或等于 b"
else
echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
echo "$a -le $b: a 小于或等于 b"
else
echo "$a -le $b: a 大于 b"
fi
布尔运算符
运算符 说明 举例
! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。
#!/bin/bash
a=10
b=20
if [ $a != $b ]
then
echo "$a != $b : a 不等于 b"
else
echo "$a == $b: a 等于 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
echo "$a 小于 100 或 $b 大于 100 : 返回 true"
else
echo "$a 小于 100 或 $b 大于 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
echo "$a 小于 5 或 $b 大于 100 : 返回 true"
else
echo "$a 小于 5 或 $b 大于 100 : 返回 false"
fi
逻辑运算符
运算符 说明 举例
&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true
#!/bin/bash
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
执行脚本,输出结果如下所示:
姓名 性别 体重kg
郭靖 男 66.12
杨过 男 48.65
郭芙 女 47.99
Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。
在命令行中通过 wc -l 命令计算 Here Document 的行数:
$ wc -l << EOF
欢迎
来
到
EOF
3 # 输出结果为 3 行
$
我们也可以将 Here Document 用在脚本中,例如:
#!/bin/bash
cat << EOF
欢迎
来
到
EOF
执行以上脚本,输出结果:
欢迎
来
到
和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。
Shell 文件包含的语法格式如下:
. filename # 注意点号(.)和文件名中间有一空格
或
source filename
#!/bin/bash
no=100
echo "obase=2;$no" | bc
1100100
no=1100100
echo "obase=10;ibase=2;$no" | bc
100
关联数组:在关联数组中,我们可以用任意的文本作为数组索引。首先,需要使用声明语句将一个变量
定义为关联数组
$ declare -A fruits_value
$ fruits_value=([apple]='100 dollars' [orange]='150 dollars')
列出数组索引
$ echo ${!array_var[@]}
$ echo ${!fruits_value[*]}
通过引用子shell的方式保留空格和换行符
假设我们使用子shell或反引用的方法将命令的输出保存到变量中,为了保留输出的空格和换
行符(\n),必须使用双引号。
$ cat text.txt
1
2
3
$ out=$(cat text.txt)
$ echo $out
1 2 3 # 丢失了1、2、3中的\n
$ out="$(cat text.txt)"
$ echo $out
1
2
3
有时候文本文件中可能包含多处连续的空白行。如果你想删除这些额外的空白行,可以这
样做:
$ cat -s file
find命令有一个选项-iname(忽略字母大小写),该选项的作用和-name类似,只不过在匹
配名字时会忽略大小写。
$ ls
example.txt EXAMPLE.txt file.txt
$ find . -iname "example*" -print
./example.txt
./EXAMPLE.txt
列出具有特定文件权限的文件
find -name '*.m' -perm 777
xargs的-n选项可以限制每次调用命令时用到的参数个数。下面的命令将输入分割成多
行,每行N个元素
cat args.txt | xargs -I {} ./cecho -P {} -1
-P arg1 arg4 -1#
-P arg2 arg5 -1#
-P arg3 arg6 -1#
tr命令:
将输入的字符由大写转化成小写:
echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z'
hello who is this
将字符加密解密
echo 12345 | tr '0-9' '9876543210'
echo 87654 | tr '9876543210' '0-9'
7654
12345
tr-d 可以指定需要被删除的字符集合,将stdin中特定字符删除
echo "hello 123 world 456" | tr -d '0-9'
hello world
tr -c [set1] [set2] 如果只给出set1,会删除不在set1中的字符,如果给出set2,会将不在set1中的字符替换成set2。
echo hello 1 char 2 next 4 |tr -d -c '0-9\n'
124
将不在set1中的字符替换成空格
echo hello 1 char 2 next 4 |tr -c '0-9\n' ' '
1 2 4
tr -s 删除字符串中的重复字符
echo "GND IS NOT NUIX" | tr -s " "
ND IS NOT NUIX
$ cat sum.txt
1
2
3
4
5
$ cat sum.txt | echo $[ $(tr ‘\n’ ‘+’ ) 0 ]
15
在命令中, tr 命令将 ‘\n’ 替换成了 ‘+’ ,我们因此得到了字符串 1+2+3+…5+ ,但是在字符
串的尾部多了一个操作符 + 。为了抵消这个多出来的操作符,我们再追加一个 0 。