如您需要技术咨询、解决方案定制、故障排除、运维监控等服务,可联系ericwcn#at#163.com。

Shell中重要的特殊变量

Linux 立杰 197℃ 0评论

Shell中重要的特殊变量

1.Shell中特殊位置参数变量

在Shell中存在一些特殊重要的位置参数变量,如:$0,$1,$#。在从命令行、函数、或脚本等传送变量时,需要用到这些参数变量。

位置变量 作用说明
$0 获取当前脚本的文件名,如果执行脚本包含路径则也会输出路径
$n 获取当前执行脚本第n个参数,n=1-9,若n大于9,这需要使用{}括起来,如:${10}
$# 获取当前执行Shell脚本后面接的参数额总个数
$* 获取当前Shell脚本所有传递的参数,不加引号和$@相同。若加引号如 “$*” 表示将所有参数作为单个字符串,相当于”$1 $2 $3 “
$@ 获取当前Shell脚本所有传递的参数,不加引号和$*相同。若加引号如 “$@” 表示将所有参数作为不同独立的字符串,相当于”$1″ “$2” “$3”

案例1 获取当前脚本的文件名

$ echo 'echo ' \$0 > 411.sh
$ sh 411.sh 
411.sh
[root@bking shellstudy]# sh /root/shellstudy/411.sh 
/root/shellstudy/411.sh

案例2 输出Shell脚本传入的参数

# 生成包括9个参数的脚本
$ echo 'echo ' \${1..9} > 412.sh
# 运行脚本
$ sh 412.sh {1..9}
#参数超过9个需要用{}
$ echo 'echo ' \$\{{1..20}\} > 412.sh
$ sh 412.sh {1..20} 

案例3 根据用户传递参数进行判断

#!/bin/bash

[ ne $# -ne 2 ] && {
    #如果执行脚本传入参数不等于2,则返回下面的信息
    echo "must two args"
    #退出脚本并返回 1
    exit 1
}

echo "shell exec success!"

案例4 “$*”,”$@”用法

#!/bin/bash
#设置3个字符串变量, -- 表示清除所有参数变量
set -- "I'm" ops man
echo '----- $* -----'
for i in "$*"
do
  echo $i
done

echo '----- $@ ------'
for i in "$@"
do
  echo $i
done

2.Shell进程中的特殊状态变量

位置变量 作用说明
$? 获取上一个指令执行状态返回值(0 成功,非0 失败)
$$ 获取当前执行Shell脚本的进程号(PID) 【不常用】
$! 获取上一个在后台工作的进程的进程号(PID)【不常用】
$_ 获取在此之前执行的命令或脚本的最后一个参数【不常用】

$?应用场景

(1)判断命令/脚本/函数等程序是否执行成功 (2)脚本执行调用”exit 数字”,则返回这个数字给 $? (3)在函数里,通过”return 数字”,返回给$?

$$应用场景

(1)多次执行同一脚本后,只允许一个脚本在运行

#!/bin/bash
pidfile='/tmp/testpidfile'

if [ -f $pidfile ]
then
  kill -9 `cat $pidfile` > /dev/null 2>&1
  rm $pidfile
fi
echo $$ > $pidfile
sleep 300

转载请注明:知识库 » Shell中重要的特殊变量

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址