【发布时间】:2020-11-04 21:11:35
【问题描述】:
所以我对 bash 脚本很陌生,我在想办法解决我的问题时遇到了问题。
所以我想将三个数字写入“ShiftCodeAssociations.txt”,然后内容如下:
1
2
3
但是,每次我运行此脚本时,我都希望它移动数字,以便将数字从顶部移到底部。
在逐行阅读 while 循环后,我发现了这个 https://www.cyberciti.biz/faq/unix-howto-read-line-by-line-from-file/ 并想出了以下内容
#!/bin/bash
input="/home/ubuntu/ShiftCodeAssociations.txt"
while IFS= read -r line
do
if [$line = "1"]
then
$line = "2"
elif [$line = "2"]
then
$line = "3"
else
$line = "1"
fi
done < $input
但是,这不起作用,它会输出
AdjustShiftCodes.sh: 5: AdjustShiftCodes.sh: [1: not found
AdjustShiftCodes.sh: 8: AdjustShiftCodes.sh: [1: not found
AdjustShiftCodes.sh: 12: AdjustShiftCodes.sh: 1: not found
AdjustShiftCodes.sh: 5: AdjustShiftCodes.sh: [2: not found
AdjustShiftCodes.sh: 8: AdjustShiftCodes.sh: [2: not found
AdjustShiftCodes.sh: 12: AdjustShiftCodes.sh: 2: not found
AdjustShiftCodes.sh: 5: AdjustShiftCodes.sh: [3: not found
AdjustShiftCodes.sh: 8: AdjustShiftCodes.sh: [3: not found
AdjustShiftCodes.sh: 12: AdjustShiftCodes.sh: 3: not found
有人可以帮我吗,拜托:)
谢谢!
【问题讨论】:
-
[不仅仅是语法,它还是一个命令。像任何命令一样,它需要空格将其与其参数分开。 -
一旦您解决了“shell 脚本对空间敏感”的基本问题,您还需要处理逻辑问题。您不需要在变量分配周围留出空格(就目前而言,您正在调用像
1这样的命令,而您没有 -line="2"就是您的意思)。您也没有回显任何输出或以其他方式处理修改后的行。不过要小心;您不能在简单的 shell 脚本中读取和写入同一个文件。如所写,您的代码不能很好地概括处理除 3 之外的任何行数。有更好的方法将第一行移到末尾。 -
请先将您的脚本粘贴到shellcheck.net,然后尝试实施那里提出的建议。
-
您能否澄清排序是否对您的问题很重要?您的问题和示例的描述让我想到了命令“sort -u”,它会反转您提供的字符串,就像您非常有效地询问一样。