首页 > 解决方案 > 如何正确使用 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

标签: bashshellif-statement

解决方案


如果你想使用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


推荐阅读