2013-10-14 4 views
0

Я работаю над своим проектом, и для этого требуется командный файл, который будет переименовывать все файлы в каталог. Первый аргумент - это имя базы , второй аргумент расширение файла. Если он работает как:как принимать входные данные как равенство в скрипте оболочки (bash)

./myprog4.sh BASE=Birthday EXT=jpg 

затем полученные файлы должны иметь имена, как: Birthday001.jpg, Birthday002.jpg, Birthday003.jpg и т.д.

Но я не мог взять входы как равенство, как BASE=$1. Обычно, когда я беру входы во время выполнения файла сценария я пишу что-то вроде:

base=$1 
extension=$2 

Что я должен делать?

+1

Почему бы не просто назвать функцию «./myprog4.sh Birthday jpg»? –

+0

thats то, что мне интересно на самом деле тоже. но его данный проект как домашнее задание, поэтому я должен сделать это таким образом: S вы не знаете? – Mertcan

+0

Вы должны использовать этот конкретный формат? Обычно вы можете использовать [getopts] (https: //rsalveti.wordpress.com/2007/04/03/bash-parsing-arguments-with-getopts /), который принимает один параметр буквы. Поэтому вы можете сделать 'myprog.sh -b Birthday -e jpg'. Может ли вход быть «myprog.sh EXT = jpg BASE = Birthday»? Это сделало бы вещи сложнее. –

ответ

0

Это похоже, как вы читаете $1 и $2 в переменные, но извлечь только необходимые части:

base=$(echo $1 | cut -d'=' -f2) 
extension=$(echo $2 | cut -d'=' -f2) 

В Баш, вы также можете сделать:

base=$(cut -d'=' -f2 <<<$1) 
extension=$(cut -d'=' -f2 <<<$2) 
+0

, который работает для этого, спасибо большое – Mertcan

+0

Что делать, если 'myprog EXT = jpg BASE = День рождения'? –

+0

@DavidW. Тогда у вас есть переключатель $ 1 и $ 2 или если входы находятся в ордере randon, то используйте оператор case и соответствие EXT = и BASE =. –

0

Если все ваши аргументы передаются в формы name=value, то вы можете сделать следующее в начале вашего скрипта myprog4.sh.

while [ "$1" != "" ]; do 
    expr $1 
    shift 
done 

При вызове ./myprog4.sh BASE=Birthday EXT=jpg ваш сценарий будет иметь возможность сделать эхо $ БАЗЫ и эхо $ EXT.

1

Во-первыхи, знайте, что вы можете установить значение в среде вашей программы по предваряя команды с переменными заданиями:

BASE=Birthday EXT=jpg ./myprog4.sh 

Когда myprog4.sh начинается, он будет видеть BASE и EXT с заданными значениями , После того, как myprog4.sh существует, BASE и EXT сохраняют свои старые значения (или остаются неустановленными, в зависимости от обстоятельств).


bash действительно позволяет назвать вашу программу так, как вы пытаетесь, с опцией -k. От человека странице:

-k Все аргументы в виде операторов присваивания, помещаются в среду для команды, а не только те, которые предшествуют имени команды.

Чтобы использовать его, вам нужно будет использовать команду set, чтобы включить эту опцию перед вызовом myprog4.sh.

$ set -k 
$ ./myprog4.sh BASE=Birthday EXT=jpg 
Смежные вопросы