Mik*_*keD 11 command-line bash scripts programming
我是 bash 编程的新手。我读过两本很好的很长的指南,但它们在我的脑海中把运算符和关键字搞得一团糟。
哪些是更常用和广泛使用的?我不知道什么时候使用哪个以及为什么。
test
,[[ ]]
或者[ ]
甚至(( ))
$((exp))
或者 $[exp]
-gt
或>
,ge
或>=
等。<
和>
或( )
何时我们必须使用\:
\<
\(
等来逃避它。==
或=
(字符串比较)我知道[
和之间的基本区别,[[
但其他问题对我来说是个谜。
先感谢您
test
是一个内置的外壳,(显然)测试某些给定的条件。一些较旧的 shell 需要一个特殊的命令。因此,您还会在 中找到一个程序/usr/bin/test
。[
也是测试某些条件的程序。该软件还需要一个右括号,您可以在 找到它/usr/bin/[
。[[…]]
是可替换的test
和[
。它是为 Korn shell ( ksh
) 开发的。但是您也可以在大于 2 的 Bash 版本和 Z Shell 中找到它。双括号有一些漂亮的特点:
-a
(AND) 或-o
(OR) 。&&
||
=
可以做更多的事情。((…))
相当于let
。所以基本上((expression))
是一样的let "expression"
。但是 withlet
你可以使用多个表达式,但双括号只允许一个表达式。$((…))
(并且还$[…]
)做了一些计算。您的 shell 会尝试计算大括号内的表达式并用结果替换该表达式。所以echo $((1+1))
导致echo 2
. 所以你的 shell 会打印数字 2。每次当你要比较两个数字,你应该使用一个破折号和两个字母(该选项-ge
,-lt
等等)。如果你想比较字符串,你应该使用=
or !=
。
你关于逃避的问题很难回答。因为除了shell之外,还取决于你使用的软件。所以,即grep
和grep -E
需要不同的转义。对于sed
,awk
和其他人也是如此。所以最好的选择是查看联机帮助页。一段时间后,您会习惯并知道何时使用转义。