ユーザーが入力したサーバーのリストを読み取り、変数に保存するにはどうすればよいですか?
例:
Please enter list of server:
(user will enter following:)
abc
def
ghi
END
$echo $variable
abc
def
ghi
シェルスクリプトで実行したいです。シェルスクリプトで以下を使用する場合:
read -d '' x <<-EOF
エラーが発生します。
line 2: warning: here-document at line 1 delimited by end-of-file (wanted `EOF')
これをシェルスクリプトに統合する方法を提案してください。
答え1
あなたはできます
servers=() # declare an empty array
# allow empty input or the string "END" to terminate the loop
while IFS= read -r server && [[ -n $server && $server != "END" ]]; do
servers+=( "$server" ) # append to the array
done
declare -p servers # display the array
これにより、ユーザーはアイテムを手動で入力したりファイルからリダイレクトしたりできます。
答え2
スクリプトやプログラムでユーザーがアイテムのリストをインタラクティブに提供するように要求することは非常にまれです(実際には元に戻す方法がない貧しい人々のテキストエディタに似ています)。
スクリプトまたはプログラムが準備されたファイルから項目のリストを読むのがより一般的です。
#!/bin/sh
while IFS= read -r item; do
printf 'The item given by the user is %s\n' "$item"
done
このスクリプトは次のように使用されます。
$ ./script.sh <myfile
内部には、myfile
スクリプトが特定のアクションを読み取って実行する行を含むテキストファイルがあります。
このスクリプトを実行いいえファイル入力が可能です。その後、入力を手動で入力する必要があります。この手動入力の終了を知らせるには、を押しますCtrl+D。