Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

[root@12crac1 scripts]# echo $$
2221
表示当前shell进程的id,即pid
$0 当前脚本的文件名
$n 传递给脚本或函数的参数,n是一个数字,表示第几个参数,$1 第一个参数,$2第二个参数
$# 传递给脚本或参数个数
$* 传递给脚本或参数的所有参数
$@ 传递给脚本或参数的所有参数,被双引号(" ")包含时,与$*有所不同
$? 上个命令的退出状态,或函数的返回值
$$ 当前shell的进程id,或函数的返回值

测试脚本

[root@12crac1 scripts]# /bin/sh test_para.sh abc yyy
File Name: test_para.sh
First Parameter : abc
First Parameter : yyy
Quoted Values: abc yyy
Quoted Values: abc yyy
Total Number of Parameters : 2
[root@12crac1 scripts]# more test_para.sh 
#!/bin/bash
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"

$*$@ 的区别

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数
但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。

[root@12crac1 scripts]# /bin/sh test_para1.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
[root@12crac1 scripts]# more test_para1.sh 
#!/bin/bash
echo "$*=" $*
echo ""$*"=" "$*"
echo "$@=" $@
echo ""$@"=" "$@"
echo "print each param from $*"
for var in $*
do
    echo "$var"
done
echo "print each param from $@"
for var in $@
do
    echo "$var"
done
echo "print each param from "$*""
for var in "$*"
do
    echo "$var"
done
echo "print each param from "$@""
for var in "$@"
do
    echo "$var"
done

退出状态

$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。
退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。
$? 也可以表示函数的返回值
[root@12crac1 scripts]# echo $?
0

Shell替换:Shell变量替换,命令替换,转义字符

[root@12crac1 scripts]# /bin/sh test_s1.sh 
Value of a is 10 
[root@12crac1 scripts]# more test_s1.sh 
#!/bin/bash
a=10
echo -e "Value of a is $a 
"
这里 -e 表示对转义字符进行替换。如果不使用 -e 选项,将会原样输出
\ 反斜杠
a 警报,响铃
 退格 删除键
f 换页(FF),将当前位置移到下页开头

 换行

 回车
	 水平制表符(tab键)
v 垂直制表符
可以使用echo 命令的-E禁止转义,默认不转义
原文地址:https://www.cnblogs.com/yhq1314/p/13572856.html