文章

变量及截取_脚本中

###变量中有字符

1
字符串常量使用单引号括起来,如果字符串中含有变量、命令等使用双引号括起来,不建议不加引号。

特殊使用方法

$$ : Shell本身的PID(ProcessID)

$! : Shell最后运行的后台Process的PID

$? : 最后运行的命令的结束代码(返回值)

$- : 打印当前 shell 中的当前选项集

1
2
3
4
5
6
himBH: 表示启用以下选项
H - histexpand
m - monitor
h - hashall
B - braceexpand
i - interactive

$* : 所有参数列表

$@ : 所有参数列表

$# : 添加到Shell的参数个数

$0 : shell本身的文件名

$1~$n : 添加到shell中的个参数值

###%%%

记忆的方法为:

# :去掉左边(键盘上#在 $ 的左边)

% :去掉右边(键盘上% 在$ 的右边)

单一符号是最小匹配;两个符号是最大匹配


例子: #、##、%、%%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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:0:5}:提取最左边的 5 个字节:/dir1

${file:5:5}:提取第 5 个字节右边的连续5个字节:/dir2
也可以对变量值里的字符串作替换:

${file/dir/path}:将第一个dir 替换为path:/path1/dir2/dir3/my.file.txt

${file//dir/path}:将全部dir 替换为 path:/path1/path2/path3/my.file.txt

shell中变量传递

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
特殊字符: 
aa="NSWufewa#@few&edewa"
aa=${aa//&/\\&}  # 还原 & 字符
#/bin/sh

function convert(){
        keyword=${1//\\/\\\\}
        keyword=${keyword//&/\\&}
        keyword=${keyword//\ /\\ }
        #keyword=${keyword//./\\.}
        #keyword=${keyword//*/\\*}
        #keyword=${keyword//&/\\&}
        #keyword=${keyword//$/\\$}
        #keyword=${keyword//+/\\+}
        #keyword=${keyword//=/\\=}
        #keyword=${keyword//^/\\^}
        #keyword=${keyword//%/\\%}
        #keyword=${keyword//!/\\!}
        #keyword=${keyword//@/\\@}
        #keyword=${keyword//#/\\#}
        #keyword=${keyword//[/\\[}
        #keyword=${keyword//]/\\]}
        #keyword=${keyword//-/\\-}
		#keyword=${keyword//\?/\\\\?}    ?号不能转义.否则要报错
        #keyword=${keyword//"/\\"}
        echo $keyword
}

pwd=$(cat pwd.conf | grep pwd)
pwd="${pwd:4}"

echo ${pwd}
pwd=`convert ${pwd}`
echo ${pwd}

sed -i "s|admin_pwd|${pwd}|g" b

本文由作者按照 CC BY 4.0 进行授权