shell val

在这里插入代码片个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 。

你可能感兴趣的:(shell val)