bash - 如何正确使用 bash 条件
问题描述
如果 $# 等于 1 并且 $1 是可读的现有文件,我只想做一些代码。我有以下代码:
if [[ $# -eq 1 ] -a [ test -r $1 ]]
我已经为 and 语句尝试了许多不同的解决方案。喜欢
[ $# -eq 1 ] $$ [ test -r $1 ]
[ $# -eq 1 -a test -r $1 ]
还有很多...
似乎没有任何效果。我认为是因为 test 命令。有时我会收到一个错误,例如未找到测试或参数太多或其他
我的整个代码:
#!/bin/bash
if [[ $# -eq 1 ] -a [ test -r $1 ]]
then
groupadd -f "TAI12A"
IFS=:
while read nachname vorname klasse
do
nutzername=$nachname$vorname
groupadd -f $klasse
useradd -g "TAI12A" -G $klasse -s /bin/bash -m -p "taipasswd $nutzername
done < $1
else
echo "Uebergabewerte fehlerhaft"
fi
解决方案
如果你想使用test
,那么没有括号:
if [ $# -eq 1 ] && test -r "$1" ; then
do this ...
fi
注意:[
是一个命令,它是一个别名,但test
有一个例外:当使用[
代替时test
,]
必须是最后一个参数。
为了说明这一点:即使现在 bash[
作为内置命令包含在内,该命令/usr/bin/[
仍应存在于您的服务器上。
PS:我只会使用:
if [ $# -eq 1 ] && [ -r "$1" ] ; then
do this ...
fi
这与
if test $# -eq 1 && test -r "${1}" ; then
do this ...
fi
bash 也有一个以[[ ... ]]
. 我建议阅读https://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html#Bash-Conditional-Expressions
推荐阅读
- javascript - 如何在 React 中列出对象中的每个键值?
- java - 利用连接和参数的准备好的语句
- sql - SQL Server 中的查找模式
- java - 如何在 Spark JSON 中不跳过空值?
- python-3.x - 使用 python 和 xslt 2.0 进行 schematron 验证
- asp.net-core - 使用 Swashbuckle 时将全局项添加到 swagger.json
- python - 云功能中的 Google oAuth
- python - volttron多平台连接教程
- python - end="" 参数在 Sublimetext 3 上不起作用
- java - SpringBoot - 测试服务