Таким образом, я запускаю Ubuntu и что я хочу сделать, проверить, чтобы видеть если $1
и $2
имейте определенные расширения и если они существуют. Если они не существуют или имеют неправильное расширение, концы сценария. Если они прямо тогда, это продвигается с кодом.
v1="$1"
v2="$2"
if [[ ! "$1"="*.txt" || "$2"="*.dat" || -e "$1" ]]; then
echo "The file is ending"
exit
fi
echo "Starting rest of code"
Это - то, как я хотел бы, чтобы это работало. В основном это присваивает v1 и v2 к их уважаемым параметрам команды. Затем это работает, если оператор, чтобы видеть, отвечают ли они требованиям. Так, например, если $1
не a .txt
файл или если $2
не a .dat
файл или если $1
не существует, затем это выходит и отображается The File is ending
. Однако, если они действительно отвечают требованиям затем, код продолжается и отображается Starting rest of code
.
Как есть прямо сейчас, это, который продолжает привычка, даже если правильные файлы вводятся. Вместо этого это выходит несмотря ни на что.
Что Вы делаете, неправильно проверяет 1$ по '.txt', где 1$ не будет содержать только расширение, но имя целого файла. Например, если будет файл, названный
file1.txt
затем, то 1$ будет содержать file1.txt
как значение, которое не равно .txt
.
то, Что необходимо сделать, получают расширение файла сначала от 1$ и затем проверяют их по типу (без точки)
v1="$1"
v2="$2"
ext1=${v1##*.}
ext2=${v2##*.}
if [ "$ext1" != "txt" ] || [ "$ext2" != "dat" ] || [ ! -e "$1" ]; then
echo "The file is ending"
exit
fi
echo "Starting rest of code"
Попытайтесь использовать в своих интересах эти basename
команда.
#!/bin/sh
if [ "$(basename $1 .txt)" = "$1" -o "$(basename $2 .dat)" = "$2" ]; then
echo "the file is ending" >&2
exit 1
fi
echo "starting rest of code"
, Что фрагмент кода пытается снять изоляцию с данного расширения и сравнить разделенную версию с оригиналом: если это неизменно, то имя файла не имеет данного расширения. Отметьте инвертированную логику (если строки равны, то у самки имени файла не есть данное расширение).
Это решение работает со стандартной оболочкой или с ударом.
Можно использовать =~
оператор для регулярного выражения, соответствующего:
#!/bin/bash
v1="$1"
v2="$2"
pat1='.*\.txt
pat2='.*\.dat
if [[ ! ($v1 =~ $pat1 && $v2 =~ $pat2 && -e $v1) ]]; then
echo Ending program
exit
fi
echo Continuing program