Shell脚本 特殊变量:$#、$*、$n、$@、$?、$$

在正常情况下,变量名只能包含数字、字母和下划线。但是,某些 Shell变量 因为包含了其他字符的变量,从而有了特殊含义,这样的变量被称为特殊变量。它们分别是:$#、$*、$n、$@、$?、$$。

Shell 特殊变量及其含义
变量 含义
$0 当前脚本的文件名。
$n(n≥1) 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。当被双引号" "包含时,$@ 与 $* 稍有不同。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。

 

1. 给脚本文件传递参数

编写下面的代码,并保存为 test.sh:

#!/bin/bash

echo "Process ID: $$"
echo "File Name: $0"
echo "First Parameter : $1"
echo "Second Parameter : $2"
echo "All parameters 1: $@"
echo "All parameters 2: $*"
echo "Total: $#"

运行 test.sh,并附带参数:

[mozhiyan@localhost demo]$ . ./test.sh Shell Linux
Process ID: 5943
File Name: bash
First Parameter : Shell
Second Parameter : Linux
All parameters 1: Shell Linux
All parameters 2: Shell Linux
Total: 2

 

2. 给函数传递参数

编写下面的代码,并保存为 test.sh:

#!/bin/bash

#定义函数
function test(){
    echo "Language: $1"
    echo "URL: $2"
    echo "First Parameter : $1"
    echo "Second Parameter : $2"
    echo "All parameters 1: $@"
    echo "All parameters 2: $*"
    echo "Total: $#"
}

#调用函数
test Java http://www.codebaoku.com/java/

运行结果为:

Language: Java
URL: http://www.codebaoku.com/java/
First Parameter : Java
Second Parameter : http://www.codebaoku.com/java/
All parameters 1: Java http://www.codebaoku.com/java/
All parameters 2: Java http://www.codebaoku.com/java/
Total: 2

字符串就是一系列字符的组合。字符串和数字是 Shell 编程中最常用的数据类型。 字符串可以由单引号包围,也可以由双引号包围,也可以不用引号。我们可以计算字符串长度、拼接字符串以及截取字符串。