一、${}
1、变量截取、替换
定义一个变量
file = /dir1/dir2/dir3/my.file.txt
通过 ${ } 分别替换获得不同的值,单一符号是最小匹配﹔两个符号是最大匹配
1 .
1 )${file# */ } :拿掉第一条 / 及其左边的字串:dir1/dir2/dir3/my.file.txt
2 )${file## */ } :拿掉最后一条 / 及其左边的字串:my.file.txt
3 )${file# *.} :拿掉第一个 . 及其左边的字串:file.txt
4 )${file## *.} :拿掉最后一个 . 及其左边的字串:txt
2 .% 右边 去掉/右边的
1 )${file% / *} :拿掉最后条 / 及其右边的字串:/dir1/dir2/dir3
2 )${file%% / *} :拿掉第一条 / 及其右边的字串:( 空值)
3 )${file% .*} :拿掉最后一个 . 及其右边的字串:/dir1/dir2/dir3/my.file
4 )${file%% .*} :拿掉第一个 . 及其右边的字串:/dir1/dir2/dir3/my
3 .字符定位:字符数
1 )${file: 0: 5} :提取最左边的 5 个字:/dir1
2 )${file: 5: 5} :提取第 5 个字?右边的连续 5 个字:/dir2
4 .字符串替换 /(第一个);//(全部)
1 )${file/ dir/ path} :将第一个 dir 提换为 path:/path1/dir2/dir3/my.file.txt
2 )${file/ / dir/ path} :将全部 dir 提换为 path:/path1/path2/path3/my.file.txt
5 .针对不同的变数状态赋值( 没设定、空值、非空值) :
- :- +
1 )${file-my.file.txt} :假如 $file 为空值,则使用 my.file.txt 作默认值。( 保留没设定及非空值)
2 )${file:- my.file.txt} :假如 $file 没有设定或为空值,则使用 my.file.txt 作默认值。 ( 保留非空值)
3 )${file+my.file.txt} :不管 $file 为何值,均使用 my.file.txt 作默认值。 ( 不保留任何值)
:+ = :=
4 )${file:+ my.file.txt} :除非 $file 为空值,否则使用 my.file.txt 作默认值。 ( 保留空值)
5 )${file=my.file.txt} :若 $file 没设定,则使用 my.file.txt 作默认值,同时将 $file 定义为非空值。 ( 保留空值及非空值)
6 )${file:= my.file.txt} :若 $file 没设定或为空值,则使用 my.file.txt 作默认值,同时将 $file 定义为非空值。 ( 保留非空值)
? :?
7 )${file?my.file.txt} :若 $file 没设定,则将 my.file.txt 输出至 STDERR。 ( 保留空值及非空值))
8 )${file:? my.file.txt} :若 $file 没设定或为空值,则将 my.file.txt 输出至 STDERR。 ( 保留非空值)
6 .计算出变量值的长度
${# file} 等于27
2、数组
1 .数组替换方法
A = ( a bc de f)
[ szb@szb shell48] $ A = ( a bc de f)
1 ) 得到全部组数
[ szb@szb shell48] $ echo ${A[ @] }
a bc de f
2 )可得到 a ( 第一个组数)
[ szb@szb shell48] $ echo ${A}
a
[ szb@szb shell48] $ echo ${A[ 0] }
a
3 )计算数组数量
[ szb@szb shell48] $ echo ${# A}
1
[ szb@szb shell48] $ echo ${# A[ @] }
4
4 )重定义数组值
A[ 3 ] = szb
二、``与$() 命令替换
在 `` 中可以使用 ${ } 直接把变量和字符串拼接起来
[ szb@szb shell48] $ echo ` date`
Tue Jul 12 17 :58:49 CST 2022
[ szb@szb shell48] $ echo $( date )
Tue Jul 12 17 :58:57 CST 2022
三、$(())与expr 整数运算
*需要转义,运算符前后需要空格
[ szb@szb shell48] $ echo ` expr 2 + 3 `
5
[ szb@szb shell48] $ echo $(( 2 + 3 ))
5