-1

私はスクリプティングに不慣れで、何が問題なのかわかりません。実際にユーザーを追加するための groupadd または useradd コマンドはまだ追加していませんが、この部分が機能するようになるとします。これまでのところ、私は持っています:

!#/bin/bash

if [$# -ne 0 ]
then
    echo "usage: $0 < file'
    exit 1
fi

first=cut -f 1 -d ',' user_list
last=cut -f 2 -d ',' user_list
lastl=cut -f 2 -d ',' user_list | head -c 1

usern=$first $lastl | tr 'A-Z' 'a-z'
tname=$first $last
while read line; do
    echo "adding $tname : $usern\n"
done < user_text

出力は次のように見えるはずですadding Jet Black: jetbが、その種類はいたるところにあります。私が間違っていることについての助けやヒントは、大いに役立ちます。

4

2 に答える 2

1

IFS単語分割における変数の役割を読んでから、次のように書くことで、おそらくもっと簡単にすることができます。

while IFS=, read first last
do
  usern=$(echo "${first}${last:0:1}" | tr [:upper:] [:lower:])
  tname="${first} ${last}"
  echo "adding ${tname} : ${usern}"
done

他にも調査すべきことがあります-部分文字列の展開(${last:0:1})、文字クラスtr[:upper:]など)、コマンドからの出力のキャプチャ($(...))。

于 2013-03-13T18:48:21.843 に答える
0

これは、構文的に正しいバージョンのスクリプトです。

#!/bin/bash

if [ $# -ne 0 ]
then
        echo "usage: $0 < file"
        exit 1
fi

while read user_list
do
        first=`echo $user_list | cut -f 1 -d ','`
        last=`echo $user_list | cut -f 2 -d ','`
        lastl=`echo $last | head -c 1`

        usern=`echo $first $lastl | tr 'A-Z' 'a-z'`
        tname=`echo $first $last`
        echo "adding $tname : $usern\n"
done < user_text

次のように、$firstとの間のスペースを削除したいと思います。$lastl$usern

usern=`echo ${first}${lastl} | tr 'A-Z' 'a-z'`

そして、おそらくtwalbergが言ったように、やるべきことはたくさんありますが、あなたの最善の最初のステップは、構文エラーを理解することだと思います。

于 2013-03-13T21:18:53.240 に答える