Проверка расширений на параметрах команды?

Таким образом, я запускаю 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.

Как есть прямо сейчас, это, который продолжает привычка, даже если правильные файлы вводятся. Вместо этого это выходит несмотря ни на что.

0
задан 24 September 2015 в 04:03

3 ответа

Что Вы делаете, неправильно проверяет 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"
0
ответ дан 28 July 2019 в 14:10

Попытайтесь использовать в своих интересах эти 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"

, Что фрагмент кода пытается снять изоляцию с данного расширения и сравнить разделенную версию с оригиналом: если это неизменно, то имя файла не имеет данного расширения. Отметьте инвертированную логику (если строки равны, то у самки имени файла не есть данное расширение).

Это решение работает со стандартной оболочкой или с ударом.

0
ответ дан 28 July 2019 в 14:10

Можно использовать =~ оператор для регулярного выражения, соответствующего:

#!/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
0
ответ дан 28 July 2019 в 14:10

Другие вопросы по тегам:

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