gpt4 book ai didi

linux - bash循环增加计数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:16 29 4
gpt4 key购买 nike

我知道事实上这将是一件非常简单的事情,我将错过最基本的事情,但我无法理解这一点。

file=( $(find $DIRECTORY -maxdepth 1  -type f) )
total=$(find $DIRECTORY -type f | wc -l)
count=0
while [ "$count" -lt "$total" ]
do
for f in "$file";
do
echo -n "Would you like to copy $file? "
read yn
case $yn in
Y | y )
cp $f $TARGET
chmod =r $TARGET/$(basename $file)
count=$((count + 1))
;;
N | n )
echo "skipping"
count=$((count + 1))
;;
* ) echo "Please enter Y or N"
exit 1
;;
esac
done
done

(抱歉格式化)。

目前基本上是这样做的

您输入源文件和目标文件。工作正常

$ ./script.sh ~/work ~/folder
Created target directory.
Would you like to copy /home/USER/work/cash.sh?

然后你要么输入y/n

它们中的任何一个都只给出相同的响应。

$ ./script.sh ~/work ~/folder
target directory exists, starting copy
Would you like to copy /home/USER/work/cash.sh? y
Would you like to copy /home/USER/work/cash.sh? y

基本上它确实复制了那个 cash.sh 文件并且它知道目录中有 2 个文件,它只是不跳到下一个文件并停留在同一个文件上,我不确定如何修复它全部。

老实说,过去几个小时我一直盯着这个看,它快把我逼疯了,任何事情都会有帮助。提前致谢。

最佳答案

首先,不要使用 UPPER_CASE_VAR_NAMES。 Here's why .

其次,引用所有你的变量,除非你明确知道什么时候你不想这样做。 Here's why .

您正在将 find 结果存储在一个数组中,因此您不需要运行 find 两次:

file=( $(find "$directory" -maxdepth 1  -type f) )
total=${#file[@]} # number of elements in the array

请注意,任何包含空格的文件名都将被拆分成单独的单词。假设您的文件名不包含换行符,您可以这样做

mapfile -t file < <(find "$directory" -maxdepth 1 -type f)

然后,遍历数组:

for f in "${file[@]}"; do 

另一种技术,不假设文件名中的字符是什么:

find "$directory" -maxdepth 1 -type f -print0 | while IFS= read -d '' -r filename; do # ...

关于linux - bash循环增加计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27844761/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com