shell编程之符号对比篇(``,(),(()),[],[[]]区别)

#!/bin/bash
#最全的shell脚本中``,(),(()),[],[[]],{}符号比较
#一、``(反引号)
#可以用作命令替换的作用。
#格式 `命令`
#实例
(for a in `ls`;do echo -e "$a";done)

#ps:另外$()也可以起到命令替换的作用
#实例
(for a in $(ls);do echo -e "$a";done)

#比较
#1.``基本上可用在全部的unix shell,可移植性较好
#2.$()并不是所有shell都支持

#二、()符号
#格式
#(command1;command2[;command3...])
#一条命令需要独占一个物理行,如果需要将多条命令放在同一行,命令之间使用命令分
#隔符(;)分隔。执行的效果等同于多个独#
#立的命令单独执行的效果。命令默认的工作目录为当前目录,可以使用cd命令切换目录
#实例
(echo "当前用户目录下桌面的所有文件";cd ~/Desktop/;for a in `ls`;do 
echo -e "$a";done)
#其中`ls`可以采用$(ls)替换

#三、${}符号
#用户变量替换
#$variable和${variable}没有太大的区别,知识${}限定了变量名的范围
#例子

a=100;
echo "a=${a}b"
:<<EOF
# 是去掉左边(在键盘上#在$之左边)
% 是去掉右边(在键盘上%在$之右边)
#和%中的单一符号是最小匹配,两个相同符号是最大匹配。

${variable#pattern}:shell在variable中查找,看它是否以给定的模式
#pattern开始,如果是,就从命令行把variable中的内容去掉左边最短的匹配模式

${variable##pattern}:shell在variable中查找,看它是否以给定的模式
#pattern开始,如果是,就从命令行把variable中的内容去掉左边最长的匹配模式

${variable%pattern}:shell在variable中查找,看它是否以给定的模式
#pattern结尾,如果是,就从命令行把variable中的内容去掉右边最短的匹配模式

${variable%%pattern}:shell在variable中查找,看它是否以给定的模式
#pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式

这四种模式中都不会改变variable的值,其中,只有在pattern中使用了*匹配符号时,
%和%%,#和##才有区别。结构中的pattern支持通配符,*表示零个或多个任意字符,
?表示仅与一个任意字符匹配,[...]表示匹配中括号里面的字符,
[!...]表示不匹配中括号里面的字符。
EOF

#四、[]符号
#为test命令的另一种形式,但要注意:
#1.必须在左括号的右侧和右括号的左侧各加一个空格,否则会报错。
#2.test命令和[]使用<,>,!=,==比较数值型,或者字符串(比较ASCII码)
#3.>或<符号必须要转义,否则会被理解成重定向。
#4.test和[]对于数值型比较还可以使用-gt,-lt
#5.test中可以使用-a,-o,!;但是如果是[]则必须要[]内部使用,
#6.test中不可以使用&&,||;[]可以使用,但必须在[]外部
#7.进行数学表达式运算,(( ))不需要再将表达式里面的大小于符号转义
#,除了可以使用标准的数学运算符外,还增加了以下符号:
#详情请看shell编程之数值运算篇([],let,(()),expr,bc对比)

https://blog.csdn.net/qq_35211818/article/details/81332751

#实例
#使用test
if test "acb" \< "abc"
then
  echo "acb小于abc"
else
  echo "acb大于abc"
fi
#使用[]
if [ "acb" \< "abc" ]
then
  echo "acb小于abc"
else
  echo "acb大于abc"
fi

#输出acb大于abc,说明从左往右比较,直到遇到第一个不相等的字符
#使用test
if test !"acb" \> "abc" -o "b" \< "abc"
then
  echo "返回true"
else
  echo "false"
fi
#使用[]
if [ !"acb" \> "abc" -o "b" \< "abc" ]
then
  echo "返回true"
else
  echo "false"
fi

#数学表达式运算实例
b=$[a=1+2,2+3,4+5]
echo $a
echo $b

#五、(())符号
#是[]针对数学表达式的加强版
#(( ))不需要再将表达式里面的大小于符号转义,除了可以使用标准的数学运算符外,还增加了以下符号:
#val++,val--,--val,++val,!,~,**,<<,>>,&,|,&&,||

#实例
b=$((a=1*2,2+3,4+5))
echo $a
echo $b

#六、[[]]
#针对[]表达式的加强版
#[[ ]]中增加模式匹配特效;
#[[]]与[]比较
#1.[[]]可以使用可以用&&,||,不能使用-a,-o连接,&&,||可以在外部也可以在内部
#2.[[]]可以使用 "=~"验证正则表达式
#3.[[]]使用<,>比较时不需要转义

#实例
#&&在[[]]内部
if [[ "a" < "b" && "c" < "a" ]]
then
  echo "成立"
else
  echo "不成立"
fi
##&&在[[]]外部
if [[ "a" < "b" ]] && [[ "c" < "a" ]]
then
  echo "成立"
else
  echo "不成立"
fi
#正则表达式
tel=13587562345
if [[ $tel =~ [0-9]{11} ]]
then
 echo "手机号码"
else
 echo "不是手机号码"
fi

#ps:shell 在执行某个命令或表达式的时候,会返回一个返回值,
该返回值保存在 shell 变量 $? 中。当 $? == 0 时,
表示执行成功;当 #$? == 1 时,表示执行失败。

if [[ "a" < "b" ]] && [[ "c" < "a" ]]
then
  echo "$?成立"
else
  echo "$?不成立"  #输出 1不成立
fi
 echo $?   #输出 0

猜你喜欢

转载自blog.csdn.net/qq_35211818/article/details/81332937