
ファイルからユーザーとパスワードを取得し、スクリプトで使用する必要があります。
私のファイルは次のとおりです(netrcは私のファイル名です)。
machine ftp.test.net login test_user password test_pass
machine ftp1.test.net login test_user1 password test_pass1
ファイルにアクセスし、特定のコンピュータのユーザー名とパスワードを取得する関数を作成したいと思います。
答え1
get_netrc_user () {
awk -v machine="$1" '$2 == machine { print $4 }' netrc
}
get_netrc_user () {
awk -v machine="$1" '$2 == machine { print $6 }' netrc
}
最初の関数は特定のコンピュータのユーザー名/ログインを取得し、2番目の関数はパスワードを取得します。
指示:
username=$( get_netrc_user 'ftp.test.net' )
password=$( get_netrc_pass 'ftp.test.net' )
ただし、get_netrc_pass
パスワードにスペースが含まれていないとします。その場合は、もう少し安全に変更できます。
get_netrc_user () {
awk -v machine="$1" '$2 == machine { sub(".*password ", "", $0); print }' netrc
}
これで、ファイル内の6番目のスペースで区切られたフィールドを返すのではなく、文字列の前のすべてのエントリpassword
(末尾にスペースを含む)を削除し、行の残りの部分を返します。パスワードに明らかにその文字列が含まれている場合、それでも失敗します。
答え2
私はそうします:
login=$(grep $mymachin "$myfile" | cut -d' ' -f3)
password=$(grep $mymachin "$myfile" | cut -d' ' -f5)
またはより良い
# reading the file only once
login_password=$(grep $mymachin "$myfile" | cut -d' ' -f3,5)
login=$(cut -d' ' -f1 <<<$login_password)
password=$(cut -d' ' -f2 <<<$login_password)
ここで例を正しく読んだので、代わりに場所の代わりにキーワードを使用することです。
line=$(grep $mymachin "$myfile")
login=$(sed 's/.*login \(.*\) .*/\1/' <<<$line)
password=$(sed 's/.*password \(.*\) .*/\1/' <<<$line)
答え3
catを使用してファイルを出力し、grepを使用してシステムを選択し、awkを使用してフィールド(あなたのパスワードなど)をフィルタリングします。
だからこんなこと
login=$(cat $myfile | grep $mymachine | awk '{print $4}')
答え4
次のコマンドを使用して、ユーザー名とパスワードのインポートを完了します。
username=`awk '/Machinename/{print $4}' filename`
pass=`awk '/Machinename/{print $6}' filename`