Вы не упоминаете, какую оболочку вы планируете использовать, поэтому я буду использовать bash, хотя это довольно стандартные вещи для всех оболочек.
Аргументы файла
Аргументы могут быть доступны через переменные $1
- $n
( $0
возвращает команду, использованную для запуска программы). Скажем, у меня есть скрипт, который просто cat
выводит n файлов с разделителем между ними:
#!/usr/bin/env bash
#
# Parameters:
# 1: string delimiter between arguments 2-n
# 2-n: file(s) to cat out
for arg in ${@:2} # $@ is the array of arguments, ${@:2} slices it starting at 2.
do
cat $arg
echo $1
done
В этом случае мы передаем имя файла в cat. Однако, если вы хотите преобразовать данные в файл (без явной записи и перезаписи), вы также можете сохранить содержимое файла в переменной:
file_contents=$(cat $filename)
[...do some stuff...]
echo $file_contents >> $new_filename
Читать со стандартного ввода
Что касается чтения из стандартного ввода, большинство оболочек имеют довольно стандартную read
встроенную функцию , хотя существуют различия в том, как указываются приглашения (по крайней мере).
Страница руководства по Bash buildins содержит довольно краткое объяснение read
, но я предпочитаю страницу Bash Hackers .
Просто:
read var_name
Несколько переменных
Чтобы установить несколько переменных, просто укажите несколько имен параметров read
:
read var1 var2 var3
read
затем поместит одно слово из stdin в каждую переменную, сбросив все оставшиеся слова в последнюю переменную.
λ read var1 var2 var3
thing1 thing2 thing3 thing4 thing5
λ echo $var1; echo $var2; echo $var3
thing1
thing2
thing3 thing4 thing5
Если введено меньше слов, чем переменных, оставшиеся переменные будут пустыми (даже если они были установлены ранее):
λ read var1 var2 var3
thing1 thing2
λ echo $var1; echo $var2; echo $var3
thing1
thing2
# Empty line
Запрашивает
Я -p
часто использую флаг для подсказки:
read -p "Enter filename: " filename
Примечание: ZSH и KSH (и, возможно, другие) используют другой синтаксис для запросов:
read "filename?Enter filename: " # Everything following the '?' is the prompt
Значения по умолчанию
Это не совсем read
трюк, но я часто использую его вместе с read
. Например:
read -p "Y/[N]: " reply
reply=${reply:-N}
В принципе, если переменная (reply) существует, верните себя, но если она пуста, верните следующий параметр («N»).