此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}
和${*}
做了什么?
答案 0 :(得分:6)
命令行参数$ 1,$ 2,$ 3,... $ 9是位置参数,$ 0指向实际的命令,程序,shell脚本或函数,$ 1,$ 2,$ 3,... $ 9作为该命令的参数。
“$ *”特殊参数将整个列表作为一个参数,其间带有空格,“$ @”特殊参数获取整个列表并将其分隔为单独的参数。
假设test.sh如下:
#!/bin/sh
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
答案 1 :(得分:4)
在手册中引用Special Parameters:
*
从一个开始扩展到位置参数。当扩展发生在双引号内时,它会扩展为单个单词 每个参数的值由第一个字符分隔
IFS
特殊变量。也就是说,"$*"
相当于"$1c$2c…"
, 其中c
是IFS
变量值的第一个字符。如果 未设置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
答案 2 :(得分: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