如何在if else情况下使用shell逻辑运算符

时间:2013-09-06 08:38:31

标签: linux bash shell unix

我需要一些帮助来为以下场景编写脚本。

要求是,根据给定目录中的配置文件(*.cfg)的数量,我需要将没有文件扩展名的所有配置文件名加载到数组中。如果目录中只有一个配置文件,那么将为数组分配值""(不是唯一可用配置文件的名称)

我正在尝试使用逻辑运算符。这是我到目前为止所尝试的。

[`ls *.cfg |wc -l`] || code_to_initialize_array;

我的问题是,如何整合只有一个配置文件的情况。

3 个答案:

答案 0 :(得分:4)

简短代码:

#!/bin/bash
array=(*.cfg)
array=("${array[@]%.cfg}")
[ ${#array[@]} -eq 1 ] && array=""

答案 1 :(得分:2)

#!/bin/bash

config=(*.cfg) #glob instead ls usage
num=${#config[@]}

case $num in
0)
echo "No config file"
;;
1)
echo "Only one config file"
;;
*)
code_to_initialize_array
;;
esac

答案 2 :(得分:0)

我一直喜欢在这种情况下滥用for循环。

for x in *.cfg; do
    [[ -f $x ]] && code_to_initialize_array
    break

显式break表示循环只迭代一次,无论您有多少.cfg个文件。如果您没有,*.cfg将按字面处理,因此[[ -f $x ]]会在尝试运行cfg之前检查“第一个”code_to_initialize_array文件是否确实存在。