我需要一些帮助来为以下场景编写脚本。
要求是,根据给定目录中的配置文件(*.cfg)
的数量,我需要将没有文件扩展名的所有配置文件名加载到数组中。如果目录中只有一个配置文件,那么将为数组分配值""
(不是唯一可用配置文件的名称)
我正在尝试使用逻辑运算符。这是我到目前为止所尝试的。
[`ls *.cfg |wc -l`] || code_to_initialize_array;
我的问题是,如何整合只有一个配置文件的情况。
答案 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
文件是否确实存在。