预定义变量
有些变量是一开始执行Script脚本时就会设定,且不能被修改,我们叫他们为预定义变量。这些变量当一执行程序时就有了,以下是一些预定义变量:
==$* :表示所有位置参数的内容,即以一个字符串显示所有向脚本传递的参数;$* 以"$1 $2 … $n"的形式输出所有参数
$#:表示命令行中位置参数的个数,传递到脚本的参数个数
$@:与$*相同,$@以"$1" “2"…"2" … "2"…"n” 的形式输出所有参数
$$:当前进程的进程号PID
$?:显示上一条命令的退出状态;0表示没有错误,其他任何值表明有错误
$! :后台运行的最后一个进程的进程号pid
举一个例子,可以帮助理解
脚本内容:
#!/bin/bash
echo "$1 $2 $3 $4 $5"
echo "脚本名称:$0"
echo "参数列表1:$*"
echo "参数列表2:$@"
echo "参数个数:$#"
echo "当前进程号:$$"
echo "命令执行结果:$?"
执行结果:
[root@linus ~]# sh yu.sh 1 2 3 4 5
1 2 3 4 5
脚本名称:yu.sh
参数列表1:1 2 3 4 5
参数列表2:1 2 3 4 5
参数个数:5
当前进程号:1951
命令执行结果:0
$*与$@区别
$*与$@的区别,只有在双引号中才能体现出来,$*是输出一个整体,而$@是分别输出参数。
脚本内容:
#!/bin/bash
echo "---------------\$*--------------"
for i in "$*"
do
echo "$i"
done
echo "---------------\$@--------------"
for i in "$@"
do
echo "$i"
done
echo"–\$*–"中的\是转义符,将其变成了普通字符,而不是预定义变量。
执行过程:
[root@linus ~]# sh 11.sh 1 2 3
---------------$*--------------
1 2 3
---------------$@--------------
1
2
3