shell入门(9)——特殊符号&逻辑运算符

shell的特殊符号&逻辑运算符

特殊符号

在我们看shell脚本的时候,经常会看到以下特殊符号,如[][[]](())$(())()等,具体他们有什么作用将会在下面一一解答

test命令

test命令主要是来做表达式判断的
1. 语法结构

test {EXPRESSION}
  1. 示例
#!/bin/bash
if test "a" == "b"
then
    echo "eq"
else
    echo "not eq"
fi
  1. 结果输出
not eq

let

let命令主要是来做算术运算
1. 语法结构

let EXPRESSION
  1. 示例
#!/bin/bash

a=1
let b=a+2
echo $b
  1. 结果输出
3

[]

[] 符号的作用与 test 命令一样,都用于判断表达式的真假。只不过 [] 将表达式括起来了,更加易读

  1. 语法结构
let EXPRESSION
  1. 示例
#!/bin/bash
if test [ "a" == "b" ]
then
    echo "eq"
else
    echo "not eq"
fi
  1. 结果输出
not eq

[[]]

[[]] 符号与[] 符号的区别是,在 [[]] 符号里,我们引用变量时可以不再用 $ 符号了,而且还可以使用 &&|| 运算符

  1. 示例
#!/bin/bash
a=10
b=20
if  [[ a -lt b ]]
then
    echo "a < b"
else
    echo "a >= b"
fi
  1. 结果输出
a < b

(())

(())符号的作用与let命令相似,用在算数运算上,执行效率上会比使用 let指令要好

  1. 示例
#!/bin/bash
a=10
b=20
((b=b+a))
echo $b

if (( a > b))
then
    echo "a>b"
else 
    echo "a<=b"
fi
  1. 结果输出
30
a<=b

$(())

$(())会把运算结果替换出来

  1. 示例
#!/bin/bash
a=10
b=$(( a <= 12 && a > 0))
echo $b
  1. 结果输出
1

如果要让他作为一个表达式去使用的话,就要结合[]一起使用

  1. 示例
#!/bin/bash
a=10
if [ $(( a < 10)) -eq 1 ]
then 
  echo a lower than 10
fi
  1. 结果输出
a lower than 10

()

()符号表示括号中作为一个子 Shell 运行,运行结果不干扰外层的 shell,这让我们可以在写shell的时候可以做到不切换当前目睹而在其他目录做事情

  1. 示例
#!/bin/bash

pwd
#去subdir这个子目录创建了test.txt文件,写入test subdir
(cd ./subdir;echo "test subdir " >test.txt )
cat ./subdir/test.txt
  1. 结果输出
/usr/xiao/myshell
test subdir

{}

{}()非常相似,不过它在当前的 shell 执行,不会产生 subshell。 单纯只使用大括号时,作用就像是个没有指定名称的函数一般。

{}()用法区别:
- {} 里的运算是在当前 Shell 运行,会影响外层结果,而()的不会影响外层结果
- {}最后一个语句必须要用;结束,否则出错,而括号()的并没有这个要求

逻辑运算符

和高级语言一样,shell语言也有逻辑运算符,与、或、非三个逻辑运算符,分别如下

  • !:非
  • -a:与
  • -o:或

由于shell中没有布尔类型,如果要做布尔判断,可以这么理解,所有结果大于0的就是true,反之为false

  1. 示例
#!/bin/bash

a=5
b=10

# 非运算
if !(( a == b ))
then
   echo "a!=b" 
fi
# 或运算
if [ $a -gt 8 -o $b -gt 8 ]
then
   echo "a > 8 || b > 8" 
fi
# 与运算
if [ $a -lt 10 -a $a -gt 0 ]
then
   echo "0<a<10" 
fi
  1. 输出结果
a!=b
a > 8 || b > 8
0<a<10

猜你喜欢

转载自blog.csdn.net/x1032019725/article/details/81127288
今日推荐