`if` `else` 语句中的 'echo' 命令不显示任何内容

`if` `else` 语句中的 'echo' 命令不显示任何内容

在我的代码中一切正常。除了语句echo=$folder中的命令if else最终什么也没做!

我该如何解决这个问题?

#!/bin/bash
echo "Enter the path to the folder. If already in folder type 1."
read input
echo
echo
if [ $input == 1 ];then 
folder=$PWD;echo="$folder"
else
folder=$input;echo="$input"
fi
cd $folder
ls
echo
echo
echo "File Name"
read file
sudo chmod +x $file
echo
echo
echo Done
exit

答案1

echo="$folder"用。。。来代替echo "$folder"

同样适用于echo="$input"

这里 echo 充当变量。=将尝试为其分配值,而不是echo自行运行该命令。如果echo="$folder"你跑了之后echo $echo,你就会pwd值。

重现您的结果;

/home/test$ folder="$PWD"
/home/test$ echo="$folder"
/home/test$ echo "$echo"
/home/test

答案2

Utsav 为您提供了正确的解决方案。问题是您正在分配给一个名为 的变量echo

不过,我会提供一些进一步的建议来改进您的脚本。

目前,您无法选择名称为 的文件夹1。此外,脚本是不必要的交互,根本不需要与用户进行任何交互。例如,如果用户在调用脚本时在命令行上给出了文件夹名称,则您根本不必询问文件夹名称。仅当用户这样做时不是提供您需要使用当前工作目录的文件夹名称:

#!/bin/sh

folder="$1"

if [ -z "$folder" ]; then
    printf 'No folder given, using "%s"\n' "$PWD" >&2
    folder="$PWD"
fi

那么,为什么要强制用户输入该文件夹中的文件名呢?您可以让他们从菜单中选择一个文件:

select file in "$folder"/*; do
    printf 'Making "%s" executable with "sudo chmod +x"\n' "$file"
    sudo chmod +x "$folder/$file"
    break
done

如果在命令行上给出了有效文件,则完整的脚本将跳过菜单:

#!/bin/sh

folder="$1"

if [ -z "$folder" ]; then
    printf 'No folder given, using "%s"\n' "$PWD" >&2
    folder="$PWD"
elif [ -f "$folder" ]; then
    # $folder is actually a file, chmod it and we're done
    sudo chmod +x "$folder"
    exit
fi

if [ ! -d "$folder" ]; then
    printf 'No such folder: %s\n' "$folder" 2>&1
    exit 1
fi

select file in "$folder"/*; do
    printf 'Making "%s" executable with "sudo chmod +x"\n' "$file"
    sudo chmod +x "$folder/$file"
    break
done

如果调用此脚本script.sh,则可以通过以下方式运行它:

$ ./script.sh                  # asks for file in current folder
$ ./script.sh myfolder         # asks for file in "myfolder"
$ ./script.sh myfolder/myfile  # quietly chmods "myfolder/myfile"

相关内容