'echo' команда в операторе `if` `else` ничего не показывает

В моем коде здесь все работает нормально. За исключением команды 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
-2
02.07.2017, 14:53
2 ответа

Заменить echo="$folder"наecho "$folder"

То же дляecho="$input"

Здесь эхо действует как переменная. =попытается присвоить ему значение, а не выполнить команду echoсамостоятельно. Если после echo="$folder"вы запустите echo $echo, вы получите значение pwd.

Воспроизведение вашего результата;

/home/test$ folder="$PWD"
/home/test$ echo="$folder"
/home/test$ echo "$echo"
/home/test
3
28.01.2020, 05:14

Утсав дал вам правильное решение. Проблема заключалась в том, что вы присваивали значение переменной с именем 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"
2
28.01.2020, 05:14

Теги

Похожие вопросы