【发布时间】:2017-12-20 01:15:52
【问题描述】:
我正在编写一个脚本,我想在数字 1 到 15 之间进行迭代,但希望它显示为 01 02 03 ... 13 14 15。基本上我要做的是使用 newusers 添加 15 个用户命令并将此脚本用作命令的
pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
基本上,当我使用参数运行脚本时,它应该是这样的 =
cstuser01:EzVlK9Je8JvfQump:1001:1001:CST8177 user:/home/cstuser01:/bin/bash
cstuser02:EsKOfvhgnWpiBT6c:1002:1002:CST8177 user:/home/cstuser02:/bin/bash
cstuser03:qzQuR5vRgxdzY6dq:1003:1003:CST8177 user:/home/cstuser03:/bin/bash
我得到了大部分工作,但我收到以下错误:
./15users.sh: 57: ./15users.sh: 非法编号:08
到目前为止,这是我的脚本(我取出了几个带有错误检查的部分)=
#!/bin/sh -u
PATH=/bin:/usr/bin ; export PATH
umask=022
#num=1 (this variable is needed depending on which loop I use below)
user=$prefix"user"
uid=1001
gid=$uid
home=/home/$user
shell=/bin/bash
#echo "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
#PASSWD=$(openssl rand -base64 12)
我最初有这个但遇到了一些问题:
while [ $NUM -le 15 ] ; do
if [ $NUM -lt 10 ] ; then
NUM=0$NUM
fi
echo "$USER$NUM:$(openssl rand -base64 12):$UID:$GID:$GECO:$HOME$NUM:$SHELL"
UID=$(( UID + 1 ))
GID=$(( GID + 1 ))
NUM=$(( NUM + 1 ))
done
我的一个朋友建议这个,它工作得很好。但我试图在未来证明这件事。如果我要添加 100 或 1,000 个用户怎么办?
for NUM in 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 ; do
echo "$USER$NUM:$(openssl rand -base64 12):$UID:$GID:$GECO:$HOME$NUM:$SHELL"
done
这不起作用:
for num in {01..15} ; do
i=09
echo "$(( 10#$num + 1 ))"
10
done
然后我尝试这个得到一个语法错误=
./15users.sh: 50: ./15users.sh: 语法错误:循环变量错误
for (( num=1; num<=15; num++ )) ; do
printf "%02d\n" $num
done
我也试过了,但是 seq 垂直打印而不是水平打印:
#iterate=$(seq -w 1 15)
for $iterate ; do
echo "$user$num:$(openssl rand -base64 12):$uid:$gid:$geco:$home$num:$shell"
done
【问题讨论】: