我有以下两个代码块,我不太确定是什么$?和$#代表.请帮忙.
代码一
#!/bin/bashUSERID="$1"
/bin/id $USERID 2>/dev/null
[ $? -eq 0 ] && echo "User found" || echo "User not found"
/bin/id -g $USERID 2>/dev/null
[ $? -eq 0 ] && echo "Group found" || echo "Group not found" `
$ cat > mtable
Run Code Online (Sandbox Code Playgroud)
代码二
#!/bin/sh
#
#Script to test for loop
#
#
if [ $# -eq 0 ]
then
echo "Error - Number missing form command line argument"
echo "Syntax : $0 number"
echo "Use to print multiplication table …Run Code Online (Sandbox Code Playgroud) 在我的Oracle Linux框中,我发现了一块/etc/profile很难理解的脚本:
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null 2>&1
fi
fi
done
Run Code Online (Sandbox Code Playgroud)
我的问题是在if语句中的变量${-#*i}和$-.那是什么意思?为什么要添加else语句来重定向输出?谢谢!
在 scp 出现一些问题之后(显然,它不喜欢我的文件中存在 bash 绑定命令.bashrc),我遵循了互联网上一个聪明人的建议(我现在找不到那个帖子),该建议放在顶部其.bashrc文件如下:
[[ ${-#*i} != ${-} ]] || return
Run Code Online (Sandbox Code Playgroud)
以确保除非在交互式会话中否则不会执行 bash 初始化。
现在,这有效了。但是,我无法弄清楚它是如何工作的。你能启发我吗?
根据这个答案,这$-是为 shell 设置的当前选项,我知道这${}是用于扩展变量的所谓“子字符串”语法。
但是,我不明白这${-#*i}部分。又为什么$-#*i不一样${-#*i}。
这个Nagios脚本使用${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
Run Code Online (Sandbox Code Playgroud)
题
做什么${1}和${*}做什么?