シェルスクリプトを使用してファイルの内容にアクセスする

シェルスクリプトを使用してファイルの内容にアクセスする

ファイルからユーザーとパスワードを取得し、スクリプトで使用する必要があります。

私のファイルは次のとおりです(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`

関連情報