linux用途功能和脚本,linux中的(),(()),[],[[]],{}的作用

ref: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1196028&page=1

()

命令组.在括号中的命令列表, 将会作为一个子shell来运行.

在括号中的变量,由于是在子shell中,所以对于脚本剩下的部分是不可用的. 父进程, 也就是脚本本身, 将不能够读取在子进程中创建的变量, 也就是在子shell中创建的变量.

(cmd1;cmd2;cmd3)

初始化数组.

Array=(element1 element2 element3)

$(...)

相当于`...`命令,返回括号中命令执行的结果

[[ $a == z* ]]    # 如果$a以"z"开头(模式匹配)那么结果将为真

[[ $a == "z*" ]]  # 如果$a与z*相等(就是字面意思完全一样), 那么结果为真.

[ $a == z* ]      # 文件扩展匹配(file globbing)和单词分割有效.

[ "$a" == "z*" ]  # 如果$a与z*相等(就是字面意思完全一样), 那么结果为真.

let命令

(( ))

(( ... ))结构可以用来计算并测试算术表达式的结果. 退出状态将会与[ ... ]结构完全相反!还可应用到c风格的for,while循环语句,(( )) 中,所有的变量(加不加$无所谓)都是数值。

$((...))结构的表达式是C风格的表达式,其返回的结果是表达式值,其中变量引用可不用‘$’(当然也可以)

for((...;...;...))

do

cmd

done

while ((...))

do

cmd

done

比较操作符

<

小于

(("$a" < "$b"))

<=

小于等于

(("$a" <= "$b"))

>

大于

(("$a" > "$b"))

>=

大于等于

(("$a" >= "$b"))

(( 0 ))

echo "Exit status of `(( 0 ))` is $?."         # 1

(( 1 ))

echo "Exit status of `(( 1 ))` is $?."         # 0

(( 5 > 4 ))                                      # 真

echo "Exit status of `(( 5 > 4 ))` is $?."     # 0

(( 5 > 9 ))                                      # 假

echo "Exit status of `(( 5 > 9 ))` is $?."     # 1

(( 5 - 5 ))                                      # 0

echo "Exit status of `(( 5 - 5 ))` is $?."     # 1

(( 5 / 4 ))                                      # 除法也可以.

echo "Exit status of `(( 5 / 4 ))` is $?."     # 0

(( 1 / 2 ))                                      # 除法的计算结果 < 1.

echo "Exit status of `(( 1 / 2 ))` is $?."     # 截取之后的结果为 0.

# 1

or ((a=1; a <= LIMIT ; a++))  # 双圆括号, 并且"LIMIT"变量前面没有"$".

do

echo -n "$a "

done

while (( a <= LIMIT ))   # 双圆括号, 变量前边没有"$".

do

echo -n "$a "

((a += 1))   # let "a+=1"

done

a=2

b=$(($a*4))     #a=2 b=8

c=$((a*3))      #a=2 c=6

{xxx,yyy,zzz,...}

大括号扩展.

echo {1..20}

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

cat {file1,file2,file3} > combined_file

# 把file1, file2, file3连接在一起, 并且重定向到combined_file中.

cp file22.{txt,backup}

# 拷贝"file22.txt"到"file22.backup"中

在大括号中, 不允许有空白, 除非这个空白被引用或转义.

echo {file1,file2}\ :{\ A," B",' C'}

file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C

代码块

这个结构事实上创建了一个匿名函数(一个没有名字的函数). 然而, 与"标准"函数不同的是, 在其中声明的变量,对于脚本其他部分的代码来说还是可见的(除了用declare,typeset命令声明的变量)

()会开启一个新的子shell,{}不会开启一个新的子shell

(())常用于算术运算比较,[[]]常用于字符串的比较.

$()返回括号中命令执行的结果

$(())返回的结果是括号中表达式值

${ }参数替换与扩展

上文来自:http://blog.csdn.net/damotiansheng/article/details/44196769

shell中${}的妙用

1. 截断功能

${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

记忆的方法为:

[list]#是去掉左边, ##最后一个

%是去掉右边, %%第一个

2. 字符串提取

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

${file:0:5}:提取最左边的 5 个字节:/dir1

${file:5:5}:提取第 5 个字节右边的连续 5 个字节:/dir2

3. 字符串替换

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

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

4. 针对不同的变量状态赋值(没设定、空值、非空值):

${file-my.file.txt}: 若$file没有设定,则使用my.file.txt作返回值。(空值及非空值时不作处理)

${file:-my.file.txt}:若$file没有设定或为空值,则使用my.file.txt作返回值。(非空值时不作处理)

${file+my.file.txt}: 若$file设为空值或非空值,均使用my.file.txt作返回值。(没设定时不作处理)

${file:+my.file.txt}:若$file为非空值,则使用my.file.txt作返回值。(没设定及空值时不作处理)

${file=my.file.txt}: 若$file没设定,则使用my.file.txt作返回值,同时将$file 赋值为 my.file.txt。(空值及非空值时不作处理)

${file:=my.file.txt}:若$file没设定或为空值,则使用my.file.txt作返回值,同时将 $file 赋值为 my.file.txt。(非空值时不作处理)

${file?my.file.txt}: 若$file没设定,则将my.file.txt输出至 STDERR。(空值及非空值时不作处理)

${file:?my.file.txt}:若$file没设定或为空值,则将my.file.txt输出至STDERR。(非空值时不作处理)

注意:

":+"的情况是不包含空值的.

":-", ":="等只要有号就是包含空值(null).

5. 变量的长度

${#file}

6. 数组运算

A=(a b c def)

${A[@]} 或 ${A[*]} 可得到 a b c def (全部组数)

${A[0]} 可得到 a (第一个组数),${A[1]} 则为第二个组数...

${#A[@]} 或 ${#A[*]} 可得到 4 (全部组数数量)

${#A[0]} 可得到 1 (即第一个组数(a)的长度),${#A[3]} 可得到 3 (第四个组数(def)的长度)

Linux $( )与${ }的区别

初学者也许会遇到这个问题~

$( )的用途和反引号` `一样,用来表示优先执行的命令,比如ls -l

$(locate build.xml),表示先找到build.xml的位置,然后再列出详细信息。

${ }就是取变量了,比如:echo ${PATH}

上文来自:http://linux.chinaunix.net/techdoc/develop/2007/05/05/956956.shtml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值