Я хотел бы записать a regex
в shellscript
который сравнил бы путь ввода данных пользователем к пользователю$HOME
. Затем это повысило бы ошибку в случае, если путь ввода данных пользователем содержит пользователя $HOME
. Домашняя папка обычно запускается с /ort/home
но /ort
часть не необходимость. Когда я выполняю его, всегда дает a valid path
хотя я ясно ввожу недопустимый путь. Что я делаю неправильно?Спасибо. Пошлите следующую ссылку [1] при необходимости видеть как regex
используются в shellscript
Моя попытка следующие
#!/bin/bash
function user_input () {
read -p "Type the path for project1:" user_path
string1="${HOME}"
echo "$string1"
if [ "$user_path" = "$string1 | /ort/home/+.* | .*+/home/+.*" ]; then
echo "Not a valid path, contains $HOME directory"
else
echo "valid path"
fi
}
function main() {
user_input
}
main
Обратите внимание, что первая запись является допустимым путем, и другие два являются недопустимыми путями.
jenny@server32:~$ ./test.sh
Type the path for project1:/scratch/random
/ort/home/j/jen
valid path
jenny@server32:~$ ./test.sh
Type the path for project1:/ort/home/j/jen
/ort/home/j/jen
valid path
jenny@server32:~$ ./test.sh
Type the path for project1:/ort/home
/ort/home/j/jen
valid path
[1] https://stackoverflow.com/questions/2237080/how-to-compare-strings-in-bash
case
управляйте подстановочными знаками шарика использования, которые довольно легки работать с:
case "$user_path" in
"$HOME"*) echo "Error: path cannot be in your HOME" ;;
*/home/*) echo "Error: cannot have 'home' in the path" ;;
*) echo "Thank you, valid path" ;;
esac