我有一个 bash 脚本,exit
当getopts
无法识别选项或找不到预期的选项参数时,我会在某个地方调用以跳过脚本的其余部分。
while getopts ":t:" opt; do
case $opt in
t)
timelen="$OPTARG"
;;
\?) printf "illegal option: -%s\n" "$OPTARG" >&2
echo "$usage" >&2
exit 1
;;
:) printf "missing argument for -%s\n" "$OPTARG" >&2
echo "$usage" >&2
exit 1
;;
esac
done
# reset of the script
Run Code Online (Sandbox Code Playgroud)
我source
在 bash shell 中编写脚本。当出现问题时,shell 会退出。
除了exit
跳过脚本的其余部分但不退出调用外壳之外,还有其他方法吗?
替换exit
withreturn
不像函数调用那样工作,脚本的其余部分将运行。
谢谢。
AIX 上的一个脚本,它检查传递的参数数量并在它们不正确时进行抱怨:-
if [ "$#" -ge 1 ]; then
...
else
echo 'Usage: myscript <a> [b] [c]'
fi
Run Code Online (Sandbox Code Playgroud)
该脚本设置了一些环境变量,因此它是来源。我的意思是我在命令行上输入以下内容。没有第二个脚本,我不是从另一个脚本中获取脚本。
. ./myscript.sh
Run Code Online (Sandbox Code Playgroud)
如果我不传递任何参数,我希望它打印出使用语句,但它会使用传递给上一个源命令的参数运行(甚至不一定是这个脚本!)。
为了仔细检查这一点,我在脚本的开头添加了这一行以证明情况确实如此。
echo $# $@
Run Code Online (Sandbox Code Playgroud)
如果我不传递任何参数,它会打印出来自先前来源脚本的编号和参数列表。
$#
当我传递零参数并获取它时,如何让它说为零?
最小可能的重新创建是一个脚本,因此:-
脚本文件
echo $# $@
Run Code Online (Sandbox Code Playgroud)
然后运行它: -
. ./myscript.sh a b c
Run Code Online (Sandbox Code Playgroud)
打印出来
3 a b c
Run Code Online (Sandbox Code Playgroud)
然后在没有任何参数的情况下再次运行它:-
. ./myscript.sh
Run Code Online (Sandbox Code Playgroud)
打印出相同的
3 a b c
Run Code Online (Sandbox Code Playgroud)
什么时候打印出来
0
Run Code Online (Sandbox Code Playgroud)
如果您不提供脚本并直接运行它:-
./myscript.sh
Run Code Online (Sandbox Code Playgroud)
然后它按预期工作并打印出来
0
Run Code Online (Sandbox Code Playgroud)
我希望这能澄清手头的问题。
由于我似乎得到了很多答案来解释为什么上述方法不起作用,并且没有答案告诉我我应该做什么,我想我会再尝试一次尝试解释我正在尝试做的事情。
要求
我需要编写一个需要至少一个参数的脚本,如果没有使用所述参数调用它就会抱怨(请参阅上面问题中的第一个代码块),并且该脚本需要设置一些环境变量。由于第二个要求,我假设我需要获取脚本的来源,以便在脚本完成时仍然设置环境变量。你怎么能写一个脚本来告诉它什么时候没有传递参数,也可以设置环境变量?
我#!/bin/ksh
在第一行有脚本。当我尝试执行此脚本 (run ./myscript.sh
) 时发生错误:
-bash: ./myscript.sh: /bin/ksh: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)
但是当我通过source myscript.sh
或bash myscript.sh
命令执行此脚本时- 脚本成功运行。
是的,没有安装ksh,安装这个是正确的。但我无法理解不同的行为./
和bash
或source
我想知道为什么从当前 shell 中的文件执行命令的命令命名为source
. 我看不到当前 shell 中的运行命令与英文单词source的含义之间的关系。这个名字背后有历史吗?
shell-script ×3
bash ×2
aix ×1
command-line ×1
exit ×1
history ×1
ksh ×1
parameter ×1
shebang ×1
shell ×1