`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 $echopwd

結果を再現してください。

/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"

関連情報