ユーザーがユーザー名を入力し、姓に基づいて時間をかけて挨拶する単純なbashスクリプトを作成しようとしています。私は現在、以下を持っています:
echo Please enter your username
read username
name=$(grep $username /etc/passwd | cut -d ':' -f 5)
h='date +%H'
if [ $h -lt 12]; then
echo Good morning ${name::-3)
その他など
名前の末尾の3つのカンマを近くに切りましたが、名前も切り取れたらと思います。
たとえば、
- はい
$name
。Amber Martin,,,
- に減らしました
Amber Martin
。 - にさらに減らす必要があります
Martin
。 - これはすべての名前に対して機能する必要があります。
ベストアンサー1
直接読むよりも使用する方がgetent passwd
良いです/etc/passwd
。getent
LDAP、NISなどとも機能します。私はそれがほとんどのUnixシステムに存在すると思います。 (私のOS Xにはありませんが、私のアカウントはありません/etc/passwd
...)
name=$(getent -- passwd "$USER" | cut -d: -f5)
文字列処理はシェルを介して実行可能パラメータ拡張、これはPOSIXに準拠しています。
name=${name%%,*} # remove anything after the first comma
name=${name%,,,} # or remove just a literal trailing ",,,"
name=${name##* } # remove from start until the last space
echo "hello $name"
${name#* }
最初のスペースまで削除を使用してください。 (その間にスペースがある2つの部分の城を持つ人がいないことを願っています。)
スプレーまたはコロンに設定して置き換えることもできますcut
。read
IFS