我在bash(3.00)shell脚本中对变量进行了大量测试,如果未设置变量,则会分配一个默认值,例如:
if [ -z "${VARIABLE}" ]; then
FOO='default'
else
FOO=${VARIABLE}
fi
Run Code Online (Sandbox Code Playgroud)
我似乎记得在一行中有一些语法,类似于三元运算符,例如:
FOO=${ ${VARIABLE} : 'default' }
Run Code Online (Sandbox Code Playgroud)
(虽然我知道这不起作用......)
我疯了,还是有类似的东西存在?
我想getopts在我的.bash_profile中定义的函数内部使用.我的想法是,我想将一些标志传递给此函数以改变其行为.
这是代码:
function t() {
echo $*
getopts "a:" OPTION
echo $OPTION
echo $OPTARG
}
Run Code Online (Sandbox Code Playgroud)
当我这样调用它时:
t -a bc
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
-a bc
?
Run Code Online (Sandbox Code Playgroud)
怎么了?我想在bc没有手动移位和解析的情况下获得该值.如何getopts在函数内正确使用?
编辑:纠正我的代码片段尝试$ OPTARG,无济于事
编辑#2:好的事实证明代码没问题,我的shell被搞砸了.打开一个新窗口解决了它.arg值确实在$ OPTARG中.
我正在尝试为useradd命令创建简单的函数,并快速提高我糟糕的shell编程技巧.
useradd -m -g [initial_group] -G [additional_groups] -s [login_shell] [username]
Run Code Online (Sandbox Code Playgroud)
现在我有点不确定如何使用可选参数.经过一些谷歌搜索,我认为可能有一个处理,只需要玩代码.
我不确定的一件事是逻辑,我很好奇你们将如何写这个.我相信它会比我可以破解的更好.
以下是我将尝试设置我的函数参数的方法,对于登录shell和初始组,我将使它们具有通用默认值.
arg1 - userName, required
arg2 - loginShell, optional (default: /bin/bash)
arg3 - initGroup, optional (default: users)
arg4 - otherGroups, optional (default: none)
Run Code Online (Sandbox Code Playgroud)
这是关于我如何构建这个问题的一些蹩脚的伪代码.
function addUser( userName, loginShell, initGroup, otherGroups){
// Not how I would go about this but you should get the point
string bashCmd = "useradd -m -g ";
// Adding the initial user group
if(initGroup == null){
bashCmd += "users";
} else {
bashCmd += …Run Code Online (Sandbox Code Playgroud) 所以我有一个关于在bash中获取opts的问题.我想获取参数的值,如果它们存在但是如果它们不存在则使用默认值.因此脚本应该采用目录和整数,但如果未指定,则$ PWD和3应为默认值.这是什么
while getopts "hd:l:" opt; do
case $opt in
d ) directory=$OPTARG;;
l ) depth=$OPTARG;;
h ) usage
exit 0;;
\? ) usage
exit 1;;
esac
Run Code Online (Sandbox Code Playgroud)