for filename in *
do
if [ "$filename" -ne even ] && [ "$filename" -ne odd ]
then
echo "$filename"
fi
done
Run Code Online (Sandbox Code Playgroud)
上面是一个简单的shell脚本,它检查当前存储库中的文件并输出名称不是“偶数”和“奇数”的文件
行不通
比较运算符-ne是算术运算符,即它只比较整数:
i=7
if [ "$i" -ne 6 ] && [ "$i" -ne 8 ]; then
echo 'i is neither 6 nor 8'
fi
Run Code Online (Sandbox Code Playgroud)
要比较字符串的不等式,请使用!=:
if [ "$filename" != 'even' ] && [ "$filename" != 'odd' ]; then
printf '%s\n' "$filename"
fi
Run Code Online (Sandbox Code Playgroud)
或者,使用case:
case "$filename" in
even|odd) ;;
*) printf '%s\n' "$filename"
esac
Run Code Online (Sandbox Code Playgroud)
另请注意,*将匹配当前目录中的任何名称,而不仅仅是常规文件的名称。要确保您只处理循环中的常规文件,请使用
for name in *; do
test -f "$name" || continue
# other code here using "$name"
done
Run Code Online (Sandbox Code Playgroud)
test -f "$name" 可以替换为
if [ ! -f "$name" ]; then
continue
fi
Run Code Online (Sandbox Code Playgroud)
要不就
[ ! -f "$name" ] && continue
Run Code Online (Sandbox Code Playgroud)
或者
[ -f "$name" ] || continue
Run Code Online (Sandbox Code Playgroud)
该continue语句跳到循环的下一次迭代。
将行更改if为:
if [ "$filename" != even ] && [ "$filename" != odd ]
Run Code Online (Sandbox Code Playgroud)
在bashshell 中,整个脚本(即从for到done包括在内)可以简化为:
GLOBIGNORE=even:odd ; printf "%s\n" *
Run Code Online (Sandbox Code Playgroud)
另一种bash方法:
shopt -s extglob # only needs to be done once, if not set already.
printf "%s\n" !(odd|even)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37714 次 |
| 最近记录: |