shell中括号作用
()
- 命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。
$()
- $( )与``(反引号)都是用来作命令替换的。
${}
-
是 用 来 作 变 量 替 换 。 一 般 情 况 下 , {} 是用来作变量替换。一般情况下, 是用来作变量替换。一般情况下,var 与 ${var} 并没有啥不一样。但是用 ${ } 会比较精确的界定变量名称的范围:
-
特殊功能
- 截断功能
假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt
${file# /}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file## /}:拿掉最后一条 / 及其左边的字符串:my.file.txt
${file# .}:拿掉第一个 . 及其左边的字符串:file.txt
${file## .}:拿掉最后一个 . 及其左边的字符串:txt
${file%/ }:拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/ }:拿掉第一条 / 及其右边的字符串:(空值)
${file%. }:拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%. }:拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:# 是去掉左边(在鉴盘上 # 在 $ 之左边)
% 是去掉右边(在鉴盘上 % 在 $ 之右边)
单一符号是最小匹配﹔两个符号是最大匹配。
${file#/}(不加*号)表示只去掉最左边的/
-
字符串截取
- 假设有变量 var=http://www.aaa.com/123.htm. - # 号截取,删除第一个/左边字符,保留右边字符。 - echo ${var#*//} - 结果是 :www.aaa.com/123.htm - ## 号截取,删除最后一个/左边字符,保留右边字符。 - echo ${var##*/} - 结果是 123.htm - %号截取,删除右边字符,保留左边字符 - echo ${var%/*} - 结果是:http://www.aaa.com - %% 号截取,删除右边字符,保留左边字符 - echo ${var%%/*} - 结果是:http: - 从左边第几个字符开始,及字符的个数 - echo ${var:0:5} - 结果是:http: - 从左边第几个字符开始,一直到结束。 - echo ${var:7} - www.aaa.com/123.htm - 从右边第几个字符开始,及字符的个数 - echo ${var:0-7:3} - 结果是:123 - 从右边第几个字符开始,一直到结束。 - echo ${var:0-7} - 结果是:123.htm-
字符串提取
- ${file:0:5} 提取最左边的 5 个字节 /dir1
${file:5:5} 提取第 5 个字节右边的连续 5 个字节 /dir2
- ${file:0:5} 提取最左边的 5 个字节 /dir1
-
替换
-
Subtopic 1
- ${file/dir/path} 将第一个 dir 提换为 path /path1/dir2/dir3/my.file.txt
- ${file//dir/path} 将全部 dir 提换为 path /path1/path2/path3/my.file.txt
-
-
根据状态为变量赋值
- 参数替换
- 参数替换
-
$(())
-
$(( ))用于整数运算
-
进制转换
- $(( ))可以将其他进制转成十进制数显示出来。用法如下:
echo $((N#xx))
其中,N为进制,xx为该进制下某个数值,命令执行后可以得到该进制数转成十进制后的值。
- $(( ))可以将其他进制转成十进制数显示出来。用法如下:
[root@localhost ~]# echo $((2#110))
6
[root@localhost ~]# echo $((16#2a))
42
[root@localhost ~]# echo $((8#11))
9
XMind - Trial Version