
#!/bin/bash
FILE_U="/home/samba/mail_add.txt"
FILE_P="/etc/passwd"
newusers $FILE_U
for line in `cat $FILE_U`
do
user_name=`echo $line | cut -d ':' -f 1`
pass=`echo $line | cut -d ':' -f 2`
txt=`cat $FILE_P | grep -e "^$user_name:"`
user_id=`echo $txt | cut -d ':' -f 3`
group_id=`echo $txt | cut -d ':' -f 4`
home_dir=`echo $txt | cut -d ':' -f 6`
##パスワード生成
PASSWORD=`perl -e "print(crypt('${pass}', 'a5'));"`
useradd -u ${user_id} -g ${group_id} -d ${home_dir} -m -p ${PASSWORD} ${user_id}
cp -rf /etc/skel/* $home_dir/
chown -R $user_id $home_dir
chmod 711 $user_id $home_dir
chgrp -R $group_id $home_dir
echo -n > /home/$user_name/.forward
echo '\'$user_name >/home/$user_name/.forward
echo '|/usr/local/bin/mailtrans.php' >>/home/$user_name/.forward
done
あるサイトで発見したシェルスクリプトを参考にして、少し修正しました。
Centos7ではエラーも無く上手くできましたが、
RedHat7.3で実行すると、下記のエラーが出て、ユーザー登録ができません。
Centos7とRedHat7.3のシェルスクリプトの書き方は違うのでしょうか?
newusers: 1 行: 不正な行です
newusers: 2 行: 不正な行です
newusers: 3 行: 不正な行です
newusers: 4 行: 不正な行です
newusers: 5 行: 不正な行です
newusers: エラーが検出されました。変更は行いません
useradd: '-g' はユ−ザ ID に使えません
chown: オペランドがありません
Try 'chown --help' for more information.
chmod: `711' の後にオペランドがありません
Try 'chmod --help' for more information.
chgrp: オペランドがありません
Try 'chgrp --help' for more information.
/usr/local/bin/users_add.sh: 行 23: /home/t-hayashi3109/.forward: そのようなファイルやディレクトリはありません
/usr/local/bin/users_add.sh: 行 24: /home/t-hayashi3109/.forward: そのようなファイルやディレクトリはありません
/usr/local/bin/users_add.sh: 行 25: /home/t-hayashi3109/.forward: そのようなファイルやディレクトリはありません
使ったtxtファイルは以下です。
t-aaaaa:t-aaaaa3109L:::t-aaaaa3109:/home/t-aaaaa3109:/bin/bash
t-bbbbb:t-bbbbb3114L:::t-bbbbb3114:/home/t-bbbbb3114:/bin/bash
t-ccccc:t-ccccc4233L:::t-ccccc4233:/home/t-ccccc4233:/bin/bash
n-ddddd:n-ddddd9992L:::n-ddddd9992:/home/n-ddddd9992:/bin/bash
y-eeeee:y-eeeee2704G:::y-eeeee2704:/home/y-eeeee2704:/bin/bash
「sh chmod: `711' の後にオペランドがありません」等で検索したのですが、思うような情報がヒットしませんでした。
どなたか、力を貸していただけないでしょうか。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
sh chmod: `711' の後にオペランドがありません
ということは
chmod 711
というコマンドを実行した、ということです。
※ オペランド(被演算子)とは https://ja.wikipedia.org/wiki/%E8%A2%AB%E6%BC%94 …
そこから逆算すると
chmod 711 $user_id $home_dir
の $user_id も $home_dir も空ではないか、ということが予測付きます。
そう仮定すると
useradd -u ${user_id} -g ${group_id} -d ${home_dir} -m -p ${PASSWORD} ${user_id}
が
useradd -u -g -d -m -p
となって、 -u の引数として -g が指定されている、となるので
useradd: '-g' はユ−ザ ID に使えません
となるのも納得できます。
※ シェルスクリプトでは、変数展開やファイル転換が終わった最後の状態で、コマンドを実行します。
そこから逆算すると
user_id=`echo $txt | cut -d ':' -f 3`
が期待通りの結果になっていない、ということです。
ということは、
・$txt が不正
・cut コマンドが不正
が考えられます。
ここで、デバッガを使ったり、$txtを出力したりするれば、状況がわかるはずです。
newusers: 1 行: 不正な行です
と出ていることから、
/home/samba/mail_add.txt
がなにか期待と違うものになっていて、 newusersでエラーになっているようです。
その後の
txt=`cat $FILE_P | grep -e "^$user_name:"`
でpasswdファイルから取り出そうにもnewusersがエラーだったので該当エントリーが無いから、$txtも空→user_id等も空となっているのでしょう。
/home/samba/mail_add.txt を徹底的に確認するのが、まず第一歩です。
連絡が遅れて申し訳ありませんでした。
丁寧な解説まで付けていただき、ありがとうございました。
> /home/samba/mail_add.txt を徹底的に確認するのが、
> まず第一歩です。
mail_add.txtを見直しました。質問欄に記載したデータと実際にテストしたデータが違っていることに気づきました。
てっきり同じデータを使っているものと思いこんでしまっていました。おかげでさまでシェルスクリプトのことが勉強できました。本当にありがとうございました。
No.2
- 回答日時:
RHEL7のソースは確認できませんでしたが…
>newusers: 1 行: 不正な行です
となるのは入力ファイルのフィールド数(':'で区切られた数)が7個になっていない時…のようです。
該当箇所は下記の通り。
/*
* Break the string into fields and screw around with them.
* There MUST be 7 colon separated fields, although the
* values aren't that particular.
*/
for (cp = buf, nfields = 0; nfields < 7; nfields++) {
fields[nfields] = cp;
cp = strchr (cp, ':');
if (NULL != cp) {
*cp = '\0';
cp++;
} else {
break;
}
}
if (nfields != 6) {
fprintf (stderr, _("%s: line %d: invalid line\n"),
Prog, line);
errors++;
continue;
}
RHEL7では要求するフィールドの数が違う…んでしょうかね?
CentOS7とRHEL7でこの辺りに差が出るとは思えませんけど…。
# 最初は改行コードが変なんじゃないかな?と思いましたが…
# CentOS7ではCR/LFでもLFでも受け入れましたねぇ…。(RHELがCR/LF受け入れない…とか?)
# ただ…passwdファイル見るとシェルの所にCR付いていますから、この後ちゃんと動作するのかは…どうなんですかね?
>txt=`cat $FILE_P | grep -e "^$user_name:"`
該当行だけ取り出したいなら…
txt=`getent passwd $user_name`
でもいいんじゃないですかねぇ…。
あとは…エラー処理ちゃんとやった方がいいかと。
> となるのは入力ファイルのフィールド数(':'で区切られた数)
> が7個になっていない時…のようです。
ご指摘の通りでした。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- PHP php ログイン 1 2022/11/01 00:24
- UNIX・Linux 実行の仕方及び実行結果が分かりません。 2 2022/11/17 19:31
- UNIX・Linux postfix smtpサーバーリレーがTLSハンドシェーク失敗 1 2022/08/15 15:45
- UNIX・Linux Linuxのシェル関数を作成して要件を満たす方法 1 2022/11/19 20:33
- UNIX・Linux AWSのEC2のZabbixユーザーでawscliコマンドが実行できない状態を解決する 1 2022/12/06 22:17
- UNIX・Linux デフォルト値のパラメータ展開 1 2022/08/12 17:34
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
このQ&Aを見た人はこんなQ&Aも見ています
-
オペランドが足りませんとコメントが出たのですが、どういう意味?
その他(ソフトウェア)
-
ラズパイで『’test.service’をstatできません:そのようなファイルやディレクトリはあり
UNIX・Linux
-
UNIX コマンドにおける # や円マークの意味
UNIX・Linux
-
-
4
linuxコマンド mkdirでディレクトリを作成したのにディレクトリではありませんとエラーが
UNIX・Linux
-
5
ファイルが移動できません。
UNIX・Linux
-
6
Winmerge ファイルの中身は同じなのに黄色くなる
その他(OS)
-
7
CPコマンドでファイルがコピーできない
その他(開発・運用・管理)
-
8
シェルスクリプト実行で”そのようなファイルやディレクトリはありません”と出ます。
UNIX・Linux
-
9
一つのTeratermのマクロで複数のTeratermのウィンドウを立ち上げることはできますか?
サーバー
-
10
oracle spool SJIS → UTF-8
Oracle
-
11
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
12
スクリプトのエラー「unexpected EOF while looking for matching `'」の解決法は?"
UNIX・Linux
-
13
Excelで数式内の文字色を一部だけ変更したい
Excel(エクセル)
-
14
必要・不要を一言でいうと?
日本語
-
15
TOPコマンドで表示するCPU使用率で100%以上の表示について
UNIX・Linux
-
16
サブディレクトリも含めて最新のファイルを調べる
UNIX・Linux
-
17
Seasar2のdiconファイルの読み方
Java
-
18
awkを使って特定の文字を削除 条件付き
UNIX・Linux
-
19
mysqlのupdate構文についての質問です。 写真がテーブルとなってます ACCOUNTテーブル
MySQL
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LinuxでWine使うとどのくらいWi...
-
Core 2 Duo の古いパソコンに最...
-
ubuntu(linux)のシャットダウン...
-
bashでシングルクォート内の変...
-
Linux のシェルスクリプトの強...
-
2TBのUSBメモリを2000円ほどで...
-
CentOSが起動時にフリーズ
-
ubuntu 24 へのCanon 複合機ス...
-
私のパソコンでVirtualBoxは使...
-
[Linux Mint] インストールした...
-
windowsxpと同じくらい軽いLinu...
-
ssh接続しようとしたらエラーメ...
-
VirtualBox ゲストOSにPC内蔵HD...
-
apacheでリバースプロキシを設...
-
ユーザ名usr1でcentos(192.168....
-
ubuntu 22日本語Remixのisoイメ...
-
zorin OS
-
至急です。kubuntu24.04ltsをUS...
-
ubuntuのシャットダウンが進ま...
-
mxlinux 起動時エラーについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LinuxでWine使うとどのくらいWi...
-
Core 2 Duo の古いパソコンに最...
-
Linux のシェルスクリプトの強...
-
ubuntu(linux)のシャットダウン...
-
bashでシングルクォート内の変...
-
ubuntuで デイスク/deb/loopと...
-
apacheでリバースプロキシを設...
-
CentOSが起動時にフリーズ
-
ubuntuのシャットダウンが進ま...
-
ubuntu が起動しない。
-
Windowsのローカルディレクトリ...
-
Ububtuでファイル共有できない...
-
Ubuntu on Xorgのログインについて
-
ログにserver reached MaxReque...
-
「/var/log」内のログの削除の...
-
ubuntu 24 へのCanon 複合機ス...
-
ssl_request_logの必要性について
-
私のパソコンでVirtualBoxは使...
-
WineのRufusでデバイスを検知す...
-
LinuxのノートパソコンでDVDコ...
おすすめ情報