Я хотел бы записать сценарий где, если пользователь вводит путь, который содержит его $HOME
каталог, это повысило бы ошибку, и сценарий будет работать, пока пользователь не введет допустимый путь, в котором повредится цикл.
По-видимому, это дает синтаксическую ошибку, если я имею continue
или break
команды. Что я делаю неправильно здесь? Спасибо, Jen.
#!/bin/bash
function project1_install_dir_path() {
boolian_2=true;
while true; do
if [ "$boolian_2" = true ] ; then
read -p "Enter FULL folder path where you want to install colsim1:" fullpath
echo "you have enterd "$fullpath". Please press 'y' to confirm and 'n' to enter again"
case "$fullpath" in
"$HOME"*) echo "Error: The path cannot be in your HOME" ;; continue
*/home*) echo "Error: The path cannot contain 'home' in the path" ;; continue
*) echo "you have entered a valid path" ;; break
esac
done
fi
}
function main() {
project1_install_dir_path
}
Терминальный вывод
jen@ss23:/bash_file.sh
-bash: /project/bash_file.sh: line 62: syntax error near unexpected token `newline'
-bash: /project/bash_file.sh: line 62: ` "$HOME"*) echo "Error: The path cannot be in your HOME" ;; continue
Необходимо действительно проверить добавление отступа. Финал done
и fi
операторы находятся в неправильном порядке, хотя Ваше добавление отступа предлагает иначе. Другая проблема case
оператор. Базовый синтаксис
case $SOMETHING in
value1)
statement1;
statement2;
;;
value2)
statement3;
statement4;
;;
esac
Это: финал ;;
должен на самом деле быть последний оператор для каждого случая и указывает на его конец. Если Вы хотите continue
в некотором случае затем необходимо поместить это continue
оператор перед любым ;;
, как так:
#!/bin/bash
function project1_install_dir_path() {
boolian_2=true;
while true; do
if [ "$boolian_2" = true ] ; then
read -p "Enter FULL folder path where you want to install colsim1:" fullpath
echo "you have enterd '$fullpath'. Please press 'y' to confirm and 'n' to enter again"
case "$fullpath" in
"$HOME"*)
echo "Error: The path cannot be in your HOME";
continue;
;;
*/home*)
echo "Error: The path cannot contain 'home' in the path";
continue;
;;
*)
echo "you have entered a valid path";
break;
;;
esac
fi
done
}
function main() {
project1_install_dir_path
}
main;