怎样才能做公司的网站/比较正规的代运营
Shell特殊变量:Shell 0,0,#, ∗,∗,@, ?,?,$和命令行参数
前面已经讲到,变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。
例如,$ 表示当前Shell进程的ID,即pid,看下面的代码:
例如,$ 表示当前Shell进程的ID,即pid,看下面的代码:
- $echo</span> <span class="sh_variable">$$</span></li></ol></pre><pre class="snippet-textonly sh_sourceCode" style="display:none;">$echo $$</pre></div></div> 运行结果 <pre class="info-box">29949</pre> <br> <table> <caption> 特殊变量列表</caption> <tbody> <tr> <th> 变量</th> <th> 含义</th> </tr> <tr> <td> $0</td> <td> 当前脚本的文件名</td> </tr> <tr> <td> $n</td> <td> 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。</td> </tr> <tr> <td> $#</td> <td> 传递给脚本或函数的参数个数。</td> </tr> <tr> <td> $*</td> <td> 传递给脚本或函数的所有参数。</td> </tr> <tr> <td> $@</td> <td> 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。</td> </tr> <tr> <td> $?</td> <td> 上个命令的退出状态,或函数的返回值。</td> </tr> <tr> <td> $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
命令行参数
运行脚本时传递给脚本的参数称为命令行参数。命令行参数用 $n 表示,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推。
请看下面的脚本:
- #!/bin/bash
- echo "File Name: $0"</span></li><li>echo <span class="sh_string">"First Parameter : $1"
- echo "First Parameter : $2"</span></li><li>echo <span class="sh_string">"Quoted Values: $@"
- echo "Quoted Values: $*"</span></li><li>echo <span class="sh_string">"Total Number of Parameters : $#"
#!/bin/bashecho "File Name: $0" echo "First Parameter : $1" echo "First Parameter : $2" echo "Quoted Values: $@" echo "Quoted Values: $*" echo "Total Number of Parameters : $#"运行结果:
$./test.sh Zara Ali File Name : ./test.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2$* 和 $@ 的区别
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(” “)包含时,都以”$1" "$2” … “$n” 的形式输出所有参数。
但是当它们被双引号(” “)包含时,”$*" 会将所有的参数作为一个整体,以"$1 $2 … $n”的形式输出所有参数;”$@" 会将各个参数分开,以"$1” “$2" … "$n” 的形式输出所有参数。
下面的例子可以清楚的看到 $* 和 $@ 的区别:
- #!/bin/bash
- echo "\$*=" $*</span></li><li>echo <span class="sh_string">"</span><span class="sh_specialchar">\"\$</span><span class="sh_string">*</span><span class="sh_specialchar">\"</span><span class="sh_string">="</span> <span class="sh_string">"$*"
- echo "\$@=" $@</span></li><li>echo <span class="sh_string">"</span><span class="sh_specialchar">\"\$</span><span class="sh_string">@</span><span class="sh_specialchar">\"</span><span class="sh_string">="</span> <span class="sh_string">"$@"
- echo "print each param from \$*"
- for var in $*</span></li><li><span class="sh_keyword">do</span></li><li> echo <span class="sh_string">"$var"
- done
- echo "print each param from \$@"
- for var in $@</span></li><li><span class="sh_keyword">do</span></li><li> echo <span class="sh_string">"$var"
- done
- echo "print each param from \"\$*\""
- for var in "$*"</span></li><li><span class="sh_keyword">do</span></li><li> echo <span class="sh_string">"$var"
- done
- echo "print each param from \"\$@\""
- for var in "$@"</span></li><li><span class="sh_keyword">do</span></li><li> echo <span class="sh_string">"$var"
- done
#!/bin/bash echo "\$*=" $* echo "\"\$*\"=" "$*"echo "\$@=" $@ echo "\"\$@\"=" "$@"echo "print each param from \$*" for var in $* doecho "$var" doneecho "print each param from \$@" for var in $@ doecho "$var" doneecho "print each param from \"\$*\"" for var in "$*" doecho "$var" doneecho "print each param from \"\$@\"" for var in "$@" doecho "$var" done执行 ./test.sh “a” “b” “c” “d”,看到下面的结果:
$*= a b c d "$*"= a b c d $@= a b c d "$@"= a b c d print each param from $* a b c d print each param from $@ a b c d print each param from "$*" a b c d print each param from "$@" a b c d退出状态
$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。
退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。
不过,也有一些命令返回其他值,表示不同类型的错误。
下面例子中,命令成功执行:$./test.sh Zara Ali File Name : ./test.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2 $echo $? 0 $
$? 也可以表示函数的返回值,后续将会讲解。