2014-01-07 120 views
1

Nagios script使用${1}${*}像这样

if [ "${1}" ]; then 
    if [ "${ERRORSTRING}" ]; then 
     echo "${ERRORSTRING} ${OKSTRING}" | sed s/"^\/ "// | mail -s "$(hostname -s): ${0} reports errors\ 
" -E ${*} 
    fi 
else 
    if [ "${ERRORSTRING}" -o "${OKSTRING}" ]; then 
     echo "${ERRORSTRING} ${OKSTRING}" | sed s/"^\/ "// 
     exit ${ERR} 
    else 
     echo no zpool volumes found 
     exit 3 
    fi 
fi 

问题

是什么${1}${*}吗?

回答

6

的命令行参数$ 1,$ 2,$ 3,... $ 9的位置参数,$ 0指向实际的命令,程序,shell脚本或函数,$ 1,$ 2,$ 3,... $ 9作为命令的参数。

“$ *”特殊参数将整个列表作为一个参数,其间带有空格,“$ @”特殊参数将整个列表分隔成单独的参数。

假设测试。SH如下:

#!/bin/sh 
echo "File Name: $0" 
echo "First Parameter : $1" 
echo "First Parameter : $2" 
echo "Quoted Values: [email protected]" 
echo "Quoted Values: $*" 
echo "Total Number of Parameters : $#" 

enter image description here

4

Special Parameters从手册中引用:

*

展开为位置参数,从1开始。当扩展出现在双引号内时,它扩展为单个字 ,每个参数的值由 IFS特殊变量的第一个字符分隔。即,"$*"相当于"$1c$2c…", 其中cIFS变量值的第一个字符。如果 IFS未设置,则参数用空格分隔。如果IFS为空,则 参数在不插入分隔符的情况下连接。

$1指的是Positional Parameter


假设下面的脚本:说

echo "${1}" 
echo "${*}" 

在调用:

bash scriptname foo bar baz 

它会产生:

foo 
foo bar baz 

现在观察变量IFS的影响。鉴于脚本:

IFS= 
echo "${1}" 
echo "${*}" 
echo "${@}" 

调用它说:

bash scriptname "foo:hey you" bar baz 

会产生:

foo:hey you 
foo:hey youbarbaz 
foo:hey you bar baz 
1

用于$ 1(显示或以获取输入用于用户交互),以显示第一个参数。

$ *用于显示输入的所有参数。

# cat schecking.sh 
#!/bin/bash 
echo "All values:" "$*" 
echo "Total number of Parameter(s) :" "$#" 

# ./schecking.sh 
All values: 
Total number of Parameter(s) : 0 

# ./schecking.sh It will help us to check 
All values: It will help us to check 
Total number of Parameter(s) : 6 

# cat schecking.sh 
#!/bin/bash 
echo "First value is:" $1 
echo "All values:" "$*" 
echo "Total number of Parameter(s) :" "$#" 

# ./schecking.sh It will help us to check 
First value is: It 
All values: It will help us to check 
Total number of Parameter(s) : 6