用于增量文件的Bash循环脚本

2022-01-25 17:08:13 标签 linuxbash

编写了一个bash脚本,以创建空文件时执行的特定时间。在第一次执行后,它返回一个语法错误&似乎无限执行。请问我的错误是什么?

/bin/bash
#Create loop for incremental files
counter=1
if (ls -f sam*.txt)2>/dev/null;
then
        max=$(ls -F sam*.txt)
        while ((counter<=5))
        do
              ((max++))
              touch sam$max.txt
              ((counter))
        done
else
        touch sam{1..10}.txt
fi

###当我读到这篇文章时,如果你的文件存在,它们总是以sam1.txt so I'd test for that first.

所以我先测试一下。

if [[ -e sam1.txt ]]; then

这意味着sam*。txt文件确实存在。如果你不想相信sam1。txt总是存在,那么赋值给一个数组并测试元素0。

sam=( sam*.txt )
if [[ -e "${sam[0]}" ]]; then

如果没有文件存在,元素0可能(取决于您可能设置的选项)是sam*。txt,它可以作为一个有效的文件名存在,但如果它存在,您仍然得到一个文件存在的命中。

你给麦克斯的任务肯定不是你想要的。

$: max=$(ls -F sam*.txt)
$: ((max++));
bash: ((: -rw-r--r-- 1 P2759474 1049089 0 Jun 23 09:27 
sam1.txt
-rw-r--r-- 1 P2759474 1049089 0 Jun 23 09:27 sam2.txt
-rw-r--r-- 1 P2759474 1049089 0 Jun 23 09:27 sam3.txt: 
syntax error in expression (error token is "r-- 1 P2759474 1049089 0 Jun 23 09:27 sam1.txt
-rw-r--r-- 1 P2759474 1049089 0 Jun 23 09:27 sam2.txt
-rw-r--r-- 1 P2759474 1049089 0 Jun 23 09:27 sam3.txt")

如果你使用的数组和文件已经存在,你想要的将已经存在。${#sam[@]}是sam中的元素个数。

$: sam=( sam*.txt )
$: if [[ -e "${sam[0]}" ]]; then
>    echo "${#sam[@]} files: ${sam[@]}"
>  fi
3 files: sam1.txt sam2.txt sam3.txt

顺便说一下,麦克斯没有任何用处。

所以

sam=( sam*.txt )
if [[ -e "${sam[0]}" ]]; then    
  cnt=${#sam[@]}
  while (( ++cnt <= 5 )); do touch sam$cnt.txt; done
else touch sam{1..10}.txt
fi

当存在sam1。txt sam2。txt和sam3。txt时运行,添加4和5。

$: ls -l sam*txt
-rw-r--r-- 1 P2759474 1049089 0 Jun 23 09:27 sam1.txt
-rw-r--r-- 1 P2759474 1049089 0 Jun 23 09:27 sam2.txt
-rw-r--r-- 1 P2759474 1049089 0 Jun 23 09:27 sam3.txt
-rw-r--r-- 1 P2759474 1049089 0 Jun 23 09:40 sam4.txt
-rw-r--r-- 1 P2759474 1049089 0 Jun 23 09:40 sam5.txt

清除它们并在它们不存在时运行,它将创建1-10。

这是你想要的吗?

阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码