我已经看到bash脚本以两种不同的方式测试非零长度字符串.大多数脚本使用-n选项:
#!/bin/bash
# With the -n option
if [ -n "$var" ]; then
# Do something when var is non-zero length
fi
Run Code Online (Sandbox Code Playgroud)
但是-n选项并不是真正需要的:
# Without the -n option
if [ "$var" ]; then
# Do something when var is non-zero length
fi
Run Code Online (Sandbox Code Playgroud)
哪种方式更好?
同样,这是测试零长度的更好方法:
if [ -z "$var" ]; then
# Do something when var is zero-length
fi
Run Code Online (Sandbox Code Playgroud)
要么
if [ ! "$var" ]; then
# Do something when var is zero-length
fi
Run Code Online (Sandbox Code Playgroud) 我试图匹配列表中的单词的存在,然后再次添加该单词(以避免重复).我正在使用bash 4.2.24并尝试以下方法:
[[ $foo =~ \bmyword\b ]]
Run Code Online (Sandbox Code Playgroud)
也
[[ $foo =~ \<myword\> ]]
Run Code Online (Sandbox Code Playgroud)
但是,似乎都不起作用.它们在bash docs示例中提到:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_04_01.html.
我认为我做错了什么,但我不确定是什么.
我已经使用Bash脚本了一段时间,我想知道这两种形式的否定与test命令之间是否有任何区别:
if [ ! condition ]; then
fi
if ! [ condition ]; then
fi
Run Code Online (Sandbox Code Playgroud)
第一个告诉shell传递参数! condition进行测试,让程序自己处理否定.另一方面,第二个传递condition给测试并让shell本身否定错误代码.
在这两种形式之间进行选择时,我应该注意哪些陷阱?什么样的价值$condition可以使他们之间的结果不同?
(我似乎记得刚刚在讨论这篇文章时读过一篇文章,但我不记得如何找到它/正是所讨论的内容.)
我试图在if条件下的bash脚本中组合逻辑AND&OR.不知何故,我没有得到所需的输出,很难排除故障.我试图验证传递给shell脚本的输入参数没有参数,并且传递的第一个参数是否有效.
if [ "$#" -ne 1 ] && ([ "$1" == "ABC" ] || [ "$1" == "DEF" ] || [ "$1" == "GHI" ] || [ "$1" == "JKL" ])
then
echo "Usage: ./myscript.sh [ABC | DEF | GHI | JKL]"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
谁能指出这里出了什么问题?
基本上寻找一个包含星号的字符串,四处寻找一个与直到循环相关的字符串,但无济于事!
例如,用户基本上会继续键入字符串,程序将拒绝它们,直到弹出一个带星号的字符串.
然后在这一点上它会回复一条消息[不能详细说明抱歉]
码:
until [ "string" == "[asteriskstuff]" ]
do
echo "just give me a string with an asterisk for crying out loud"
read "string"
done
Run Code Online (Sandbox Code Playgroud)
当用户停止输入hi然后决定输入hi*它将显示回声消息基本上我只想绕过bleedin'星号因为[asteriskstuff]是我总是动摇的区域!
所有帮助赞赏!
摘要:如何以直接循环的简单方式绕过星号?
所以我目前只是试图遍历我当前的目录,在那里我调用以下bash脚本,每次找到一个打印出来的'我们找到了一个.c文件'.我有一个if语句来检查args,因为我将扩展脚本,如果没有找到args它将继续运行,并且一个arg将告诉脚本要查看的目录.
问题是,此代码不起作用:
if [ -z "$#" ]
then
for i in *.c; do
echo "We found a .c file"
done
fi
Run Code Online (Sandbox Code Playgroud)
但是如果我加入echo "Test",它有效吗?
if [ -z "$#" ]
echo "Test"
then
for i in *.c; do
echo "We found a .c file"
done
fi
Run Code Online (Sandbox Code Playgroud)
我是bash的新手,也不知道为什么会发生这种情况.谁能帮我吗?
我知道在贝壳中感叹号可以反转条件的结果.在这里,我想用它来测试变量是真还是假.
#! /bin/bash
bat=false
if [ ! $bar ]; then
echo 'bar is false'
else
echo 'bar is true'
fi
Run Code Online (Sandbox Code Playgroud)
我期待'酒吧是假的'.然而事实证明了另一种方式.然后我用"$ bar"=="false".这是正确的.
那么使用感叹号的提示是什么?当我们测试文件时,它只会反转结果吗?