欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。由于本站位于香港虚拟主机,故速度比较慢。

文摘  Shell 中的符号与变量用法汇总

Shell 网络 162 0评论

1,特殊shell变量


$# 传递到脚本的参数个数

$*以一个单字符串显示所有向脚本传递的参数

$$脚本运行的当前进程ID号

$!后台运行的最后一个进程的ID号

$@与$*相同,但是使用时加引号,并在引号中返回每个参数。

$-显示Shell使用的当前选项,与set命令功能相同。

$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

$_ 显示传参的最后一个参数


command > file将输出重定向到 file。

command < file将输入重定向到 file。

command >> file将输出以追加的方式重定向到 file。

n > file将文件描述符为 n 的文件重定向到 file。

n >> file将文件描述符为 n 的文件以追加的方式重定向到 file。

n >& m将输出文件 m 和 n 合并。

n <& m将输入文件 m 和 n 合并。

<< tag将开始标记 tag 和结束标记 tag 之间的内容作为输入。


$ command > /dev/null

/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。

如果希望屏蔽 stdout 和 $ command > /dev/null 2>&1


$0脚 本名字

$1位置参数 #1

$2 - $9位置参数 #2 - #9

${10}位置参数 #10

$#位置参数的个数

"$*"所有的位置参数(作为单个字符串) *

"$@"所有的位置参数(每个都作为独立的字符串)

${#*}传递到脚本中的命令行参数的个数

${#@}传递到脚本中的命令行参数的个数

$?返回值

$$脚本的进程ID(PID)

$-传递到脚本中的标志(使用set)

$_之前命令的最后一个参数

$!运行在后台的最后一个作业的进程ID(PID)


2,二元比较


-eq   等于 

=   等于

==    等于

-ne  不等于 

!=    不等于

-lt    小于 

\<    小于 (ASCII) *

-le    小于等于 

-gt   大于 

\>   大于 (ASCII) *

-ge     大于等于 

-z   字符串为空

-n   字符串不为空

>    大于 

>=  大于等于 

<   小于 

<=   小于等于


3,文件测试类型


-e  文件是否存在 

-s  文件大小不为0

-f  是一个标准文件 

-d  是一个目录 

-r  文件具有读权限

-w  文件具有写权限 

-x  文件具有执行权限 

-h  文件是一个符号链接 

-L  文件是一个符号链接

-b  文件是一个块设备 

-c  文件是一个字符设备 

-g  设置了sgid标记

-p  文件是一个管道 

-u  设置了suid标记

-S  文件是一个socket 

-k  设置了"粘贴位"

-t  文件与一个终端相关联 

-N  从这个文件最后一次被读取之后, 它被修改过 

-O  这个文件的宿主是你 

-G  文件的组id与你所属的组相同 

F1 -nt F2文件F1比文件F2新 *

F1 -ot F2文件F1比文件F2旧 * 

F1 -ef F2文件F1和文件F2都是同一个文件的硬链接 *


!"非" (反转上边的测试结果)


4,参数替换和扩展


表达式  含义

${var}变量var的 值, 与$var相同


${var-DEFAULT}如果var没 有被声明, 那么就以$DEFAULT作为其值 *

${var:-DEFAULT}如果var没 有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 *


${var=DEFAULT}如果var没 有被声明, 那么就以$DEFAULT作为其值 *

${var:=DEFAULT}如果var没 有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 *


${var+OTHER}如果var声 明了, 那么其值就是$OTHER, 否则就为null字符串

${var:+OTHER}如 果var被设置了, 那么其值就是$OTHER, 否则就为null字符串


${var?ERR_MSG}如果var没 被声明, 那么就打印$ERR_MSG *

${var:?ERR_MSG}如果var没 被设置, 那么就打印$ERR_MSG *


${!varprefix*}匹配之前所有以varprefix开头进行声明的变量

${!varprefix@}匹配之前所有以varprefix开头进行声明的变量


${#string}$string的 长度


${string:position}在$string中, 从位置$position开始提取子串

${string:position:length}在$string中, 从位置$position开始提取长度为$length的子串


${string#substring}从 变量$string的开头, 删除最短匹配$substring的子串

${string##substring}从 变量$string的开头, 删除最长匹配$substring的子串

${string%substring}从 变量$string的结尾, 删除最短匹配$substring的子串

${string%%substring}从 变量$string的结尾, 删除最长匹配$substring的子串


${string/substring/replacement}使用$replacement, 来代替第一个匹配的$substring

${string//substring/replacement}使 用$replacement, 代替所有匹配的$substring

${string/#substring/replacement}如 果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring

${string/%substring/replacement}如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring


expr match "$string" '$substring'匹配$string开头的$substring* 的长度

expr "$string" : '$substring'匹 配$string开头的$substring* 的长度

expr index "$string" $substring在$string中匹配到的$substring的第一个字符出现的位置

expr substr $string $position $length在$string中 从位置$position开始提取长度为$length的子串

expr match "$string" '\($substring\)'从$string的 开头位置提取$substring*

expr "$string" : '\($substring\)'从$string的 开头位置提取$substring*

expr match "$string" '.*\($substring\)'从$string的 结尾提取$substring*

expr "$string" : '.*\($substring\)'从$string的 结尾提取$substring*


5,中括号


if [ CONDITION ]测 试结构

if [[ CONDITION ]]扩 展的测试结构

Array[1]=element1数 组初始化

[a-z]正 则表达式的字符范围


6,大括号


${variable}参数替换

${!variable}间 接变量引用

{ command1; command2; . . . commandN; }代码块

{string1,string2,string3,...}大 括号扩展


7, 圆括号


( command1; command2 )子shell中 执行的命令组

Array=(element1 element2 element3)数组初始化

result=$(COMMAND)在 子shell中执行命令, 并将结果赋值给变量

>(COMMAND)进 程替换

<(COMMAND)进 程替换


8,双圆括号


(( var = 78 ))整型运算

var=$(( 20 + 5 ))整型运算, 并将结果赋值给变量


9,引 号


"$variable"" 弱"引用'string'"强"引用


10,后 置引用


result=`COMMAND`在 子shell中运行命令, 并将结果赋值给变量


原文地址:http://www.cnblogs.com/kingle-study/p/9384697.html

转载请注明: ITTXX.CN--分享互联网 » Shell 中的符号与变量用法汇总

最后更新:2018-12-21 17:17:26

赞 (1) or 分享 ()
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽