我如何知道Bash中是否设置了变量?
例如,如何检查用户是否将第一个参数提供给函数?
function a {
# if $1 is set ?
}
Run Code Online (Sandbox Code Playgroud) 我需要检查输入参数是否存在.我有以下脚本
if [ "$1" -gt "-1" ]
then echo hi
fi
Run Code Online (Sandbox Code Playgroud)
我明白了
[: : integer expression expected
Run Code Online (Sandbox Code Playgroud)
如何首先检查输入参数1以查看它是否存在?
我对Bash中括号,括号,花括号的用法以及它们的双重或单一形式之间的区别感到困惑.有明确的解释吗?
最近在一次代码审查中,一位同事声称该[[ ]]
构造比[ ]
在类似的构造中更受欢迎
if [ "`id -nu`" = "$someuser" ] ; then
echo "I love you madly, $someuser"
fi
Run Code Online (Sandbox Code Playgroud)
他无法提供理由.有吗?
有人可以解释bash脚本之间-eq
和之间的区别==
吗?
以下是否有任何区别?
[ $a -eq $b ]
和 [ $a == $b ]
只是==
当变量包含数字时才使用它吗?
在学习bash的同时,我会看到四种使用if
语句的方式:
bash中的Parenthesis和Square Brackets有什么区别.
pathname=$(cat $HOME/.rm.cfg)
if [ ! -z $pathname/$1 ]
Run Code Online (Sandbox Code Playgroud)
.rm.cfg
是包含以下目录的文件
/家/用户名/ deleted1
$1
是文件的名称,例如.玻璃
为什么该行如果[ ! -z $pathname/$1 ]
给出二元运算符预期的错误.
我对bash编程有点挣扎,因为我似乎不理解语法规则.例如:
read confirm
if [ "$confirm" == "yes" ]; then
echo "Thank you for saying yes"
else
echo "Why did you say no?"
fi
Run Code Online (Sandbox Code Playgroud)
在此代码中,您可以使用许多表单来执行相同的操作:
"$confirm" == "yes"
$confirm == "yes"
"$confirm" == yes
$confirm == yes
Run Code Online (Sandbox Code Playgroud)
那么规则是什么?除此之外,它非常严格,所以如果你在'['和'''之间没有空格的情况下编写上面的if语句,你就会收到错误.所以我的问题是:
此致,
拉菲德
作为初学者,我没有在任何地方找到答案,关于间距(语法)和解析的规则.
例如.
我可不可以做
if [$# -eq 2] ;
then
llll
fi
Run Code Online (Sandbox Code Playgroud)
或者我必须在对象之间留下一两个空白,如
if [ $# -eq 2 ] ;
then
llll
fi
Run Code Online (Sandbox Code Playgroud)
第二个相关的问题是关于它们之间的区别
if [[ $# -eq 2 ]] ;
then
wafwaf
fi
Run Code Online (Sandbox Code Playgroud)
我关心的是前后间距[
,]
.
没有搜索为我提供了一套规则.
设定后:
var1="a\nb"
var2="$var1"
Run Code Online (Sandbox Code Playgroud)
我期待$var1
并且$var2
平等; 然而:
[[ $var1 == $var2 ]] && echo yes || echo no
Run Code Online (Sandbox Code Playgroud)
回报no
.这是为什么?
我刚刚习惯了shell脚本编写,并且遇到了一些我不太确定如何使用Google的内容。
在我阅读的教程中,它表明编写if语句的正确方法是这样的:
if [ $a == $b ]; then
echo "a == b"
fi
Run Code Online (Sandbox Code Playgroud)
但是我在我们的代码库中看到省略了半冒号的地方:
if [ $a == $b ] then
echo "a == b"
fi
Run Code Online (Sandbox Code Playgroud)
我也看过双方括号:
if [[ $a == $b ]]; then
echo "a == b"
fi
Run Code Online (Sandbox Code Playgroud)
当我在bash中测试了所有这些功能后,似乎没有什么区别。有区别吗?它与兼容性有关吗?正确的风格是什么?
我编写了一个帮助菜单,以供参考shell脚本的使用 my_script.sh
echo $'\n\n'
echo $(printf '=%.0s' {1..100})
printf ' %.0s' {1..40}
echo "Welcome"
echo $(printf '=%.0s' {1..100})
echo $'\n'
arg=$1
echo "Input : $arg"
echo
if [[ arg -eq "-h" ]] || [[ arg -eq "-H" ]] || [[ arg -eq "-help" ]] || [[ arg -eq "-Help" ]] || [[ arg -eq "--h" ]] || [[ arg -eq "--H" ]] || [[ arg -eq "--help" ]] || [[ arg -eq "--Help" ]]; then
echo "Help menu requested...."
echo …
Run Code Online (Sandbox Code Playgroud) 我是Shell的新手。而且我)用的使用(糊涂一点点,[],{}像shell脚本$()
,[ [] ]
,${}
等等。我想对它们的用法进行分类,以更有效地学习shell脚本。