Ви не згадуєте, яку оболонку ви плануєте використовувати, тому я вважаю, що це башти, хоча це досить стандартні речі в оболонках.
Аргументи файлу
Доступ до аргументів можна отримати через змінні $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
Читайте з stdin
Що стосується читання з stdin, більшість оболонок мають досить стандартний read
вбудований характер, хоча існують відмінності в тому, як вказано підказки (принаймні).
Сторінка " Bash buildins man" має досить стисле пояснення 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}
В основному, якщо змінна (відповідь) існує, поверніться, але якщо вона порожня, поверніть наступний параметр ("N").