[Linux命令小技巧]关于seq的使用技巧.

seq 可以表达数字,一串数字。 例如 seq 50 就会从一打印到 50 个数字 ,还可以跳着出数。例如想每隔两个数出一个数字 seq 1 2 10 这样就只有奇数输出. 例如想产生一个前边家字符的循环 seq -f ‘yoyojacky%g’ 10 这样就会产生从yoyojacky1-yoyojacky10的字符串。
用于产生从某个数到另外一个数之间的所有整数
  例一:
  # seq 1 10
  结果是1 2 3 4 5 6 7 8 9 10
seq
-f, –format=FORMAT use printf style floating-point FORMAT (default: %g)
-s, –separator=STRING use STRING to separate numbers (default: \n)
-w, –equal-width equalize width by padding with leading zeroes

-f 选项 指定格式
例如:
#seq -f”%3g” 9 11
9
10
11
% 后面指定数字的位数 默认是”%g”,
“%3g”那么数字位数不足部分是空格
#sed -f”%03g” 9 11 这样的话数字位数不足部分是0
% 前面制定字符串
seq -f “yoyojacky%03g” 9 11
yoyojacky009
yoyojacky010
yoyojacky011

-w 指定输出数字同宽 不能和-f一起用
# seq -w -f”test%03g” 9 11
seq: format string may not be specified when printing equal width strings
# seq -w 99 103
099
100
101
102
103
输出是等宽状态的,前面会补零来满足字符长度.

-s 指定分隔符 默认是回车
seq -s” ” -f”student%03g” 9 11
student009 student010 student011

有朋友会问我这个东西做什么用呢?
生成序列有什么用途呢?
其实很多地方都可以用到的,这里举例说明一下,例如在企业里,新构建的邮件服务器需要批量添加用户帐户,100个.
用户名都是以stuff加上用户的序列号,例如stuff001, stuff002,这样的样式,并且需要生成8位随机密码,请你编写一个脚本来实现,做为管理员,你一定会想到很多方法,其中一个比较方便的方法就是写一个批处理添加帐户的脚本.
我们用到的命令是: useradd / passwd来进行帐户的添加和创建密码.可是这样不能够批量创建,想要批量创建的话,这些帐户的序列号很多,一个一个地输入很不方便,我们就可以结合脚本,结合shell的循环语句来实现:
批处理脚本如下:
仅供参考:

批量添加用户

批量添加用户

图中的一些内容需要讲解一下:
userlist=$(seq -f”student%03g” $NUMBER1 $NUMBER2) 语句是为了生成批量的用户,而for语句是为了实现循环, useradd是添加用户,
PASSWD=$(openssl rand -base64 5)这条语句是为了实现8位长度的随机密码, 利用的是openssl语句的随机码功能,rand是实现生成伪随机字节(man openssl 可以看到rand选项的功能是:rand Generate pseudo-random bytes.), base64是基于64位编码的算法, 最后一个5代表生成的随机码的长度:
[root@rhel5 /]# openssl rand -base64 10
TXmei9PawwOGyg==
[root@rhel5 /]# openssl rand -base64 5
kTPtyOA=
[root@rhel5 /]#
这里可以看出来,如果用10位的长度,算出的随机伪码长度16位,不便于用户使用,我们这里利用这个命令生成随机码是为了作为用户的初始密码使用的.所以5位长度的编码生成的随机码就正好8位,满足我们安全的需要了,因此这里用5而不用10或者别的数字.
批量添加用户的脚本执行后的结果:
[root@rhel5 /]# sh test.sh
请输入起始帐户编号(例如:l):1
请输入结束帐户编号(例如:100):5
student001
Changing password for user student001.
passwd: all authentication tokens updated successfully.
student002
Changing password for user student002.
passwd: all authentication tokens updated successfully.
student003
Changing password for user student003.
passwd: all authentication tokens updated successfully.
student004
Changing password for user student004.
passwd: all authentication tokens updated successfully.
student005
Changing password for user student005.
passwd: all authentication tokens updated successfully.
帐户创建完成!!
[root@rhel5 /]#
检查结果看看:
[root@rhel5 /]# tail -n 5 /etc/passwd
student001:x:504:504::/home/student001:/bin/bash
student002:x:505:505::/home/student002:/bin/bash
student003:x:506:506::/home/student003:/bin/bash
student004:x:507:507::/home/student004:/bin/bash
student005:x:508:508::/home/student005:/bin/bash
[root@rhel5 /]#
[root@rhel5 /]# tail -n 5 /etc/shadow
student001:$1$ATIgawOJ$RqNFEs9mU3.SXFi43QtMP.:15313:0:99999:7:::
student002:$1$4Lmxs2cM$Yr4fz7d2xZNcvXHytjn4m/:15313:0:99999:7:::
student003:$1$dY1sdDG5$DXr4ufg1LzamNKDfWhCiR.:15313:0:99999:7:::
student004:$1$qNQP74Jr$TDf1gJfJv2mvMHoX.uuLJ.:15313:0:99999:7:::
student005:$1$XYjo5ri2$pn7uAMZTCqwVaVKL0hwfj/:15313:0:99999:7:::
[root@rhel5 /]#
帐户和密码文件创建完成了,很迅速.
那么我们再去看看生成的随机密码文件:
[root@rhel5 /]# cat password.txt
student001 0jFNDY4=
student002 oeIZ3Dk=
student001 pb+FFi8=
student002 EQ4DqYQ=
student003 d0b7wvI=
student004 BPu1yRk=
student005 e093uig=
[root@rhel5 /]#
这样一来,管理员只要将这些密码交付给用户就可以让用户使用linux资源了.类似的管理需求只要举一反三就可以了…是不是很方便呢?

About 李 伟斌

Just K.I.S.S To Be Or Not To Be, It's Your Qustion. --Keep It Simple & Stupid.
This entry was posted in Linux and tagged , , , , , , , , , . Bookmark the permalink.

发表评论