gpt4 book ai didi

Linux Shell 脚本 : Script Check

转载 作者:太空宇宙 更新时间:2023-11-04 10:11:13 26 4
gpt4 key购买 nike

我是 Linux bash 脚本的新手,我似乎找不到我做错了什么。这是我的代码。输入数字 2 和 3,在提示我询问用户我的代码停止后,它不会继续执行 IF ELSE 语句。感谢那些愿意提供帮助的人!

#!/bin/bash

while true
do
clear
echo "Please enter one of the following options"
echo "1. Move empty files"
echo "2. Check file size"
echo "3. Which file is newer"
echo "4. File check rwx"
echo "5. Exit".
echo -e "Enter Choice:"
read answer
case "$answer" in
1) ./move_empty
exit 55 ;;
2) echo "Enter a filename"
read filename
if [ -f $filename ];
then ./file_size
fi
;;
3) echo "Enter first file:"
read filename
echo "Enter second file:"
read filename2
if [ ! -f "$filename" ];
then
echo "Supplied file name" $filename "does not exist";
if [ $filename" -nt $filename" ]; then
echo $filename "is newer"
exit 1fi
fi ;;

5) exit ;;
esac
done

最佳答案

如果您在 ShellCheck.net 完成了检查,那么你应该已经收到:

$ shellcheck myscript
No issues detected!

如果您没有做到这一点,那么您还没有完成。您的脚本中有多个引号问题,您比较 $filename -nt $filename (这总是错误的)。小的“关注细节”问题会产生很大的不同。 ShellCheck.net做得很彻底,但不会发现逻辑问题,这些都留给你。您的报价清理看起来类似于:

#!/bin/bash

while true
do
clear
echo "Please enter one of the following options"
echo "1. Move empty files"
echo "2. Check file size"
echo "3. Which file is newer"
echo "4. File check rwx"
echo "5. Exit".
echo -n "Enter Choice: "
read -r answer
case "$answer" in
1) ./move_empty
exit 55
;;
2) echo -n "Enter a filename: "
read -r filename
if [ -f "$filename" ]
then
./file_size
fi
;;
3) echo -n "Enter first file: "
read -r filename
echo -n "Enter second file: "
read -r filename2
if [ ! -f "$filename2" ]
then
echo "Supplied file name $filename does not exist";
if [ "$filename" -nt "$filename2" ]; then
echo "$filename is newer"
exit 1
fi
fi
;;
5) exit
;;
esac
done

(注意:您不需要echo -e,因为在您的提示中没有反斜杠转义字符需要处理,可能您打算-n 以防止在提示末尾添加换行符)

(另请注意:使用 clear,虽然对某些终端没问题,但会导致其他终端出现问题。请注意潜在的问题。)

如果您的 then 与您的条件表达式在同一行,例如if [ "$filename"-nt "$filename2"]; then 那么结束']'之后需要一个';'来表示一个换行,否则就不需要对于 ';'


逻辑问题

如前所述,逻辑问题不会被 ShellCheck 发现,您必须仔细检查代码。看起来您打算执行以下操作:

        3)  echo -n "Enter first file: "
read -r filename
echo -n "Enter second file: "
read -r filename2
if [ ! -f "$filename" ] || [ ! -f "$filename2" ]
then
echo "Supplied file '$filename' or '$filename2' does not exist";
exit 1
fi
if [ "$filename" -nt "$filename2" ]; then
echo "$filename is newer"
else
echo "$filename2 is newer"
fi
;;

你只需要一行一行地看...

检查一下,如果您还有其他问题,请告诉我。

关于Linux Shell 脚本 : Script Check,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48981688/

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