shell基础
一、生成加密码
1、centos7:grub2
在物理机上任何人都可以修改密码,是极其不安全的,在centos7中grub2可以实现grub菜单加密,这个先不说grub2-mkpasswd-pbkdf2
然后回车输入密码
2、centos6:grub-md5
grub-md5-crypt
和centos7一样,生成的是由MD5加密方式的密码
二、生成自然数
1、echo { }
对于终端如果想生成自然数。可以使用 echo {00..19}
对于for循环来说也可以使用 { }如下例
for i in {10..20}
do
echo $i
done
进阶版:接受用户输入的数字进行遍历
read -p "请输入任何数" one
read -p "请输入任何数" two
for i in `eval echo {$one..$two}`
do
echo $i
done
a、 知识点
- 对于要解析里面的变量需要多次扫描,则得需要用eval,由于是一个语句则要给eval加
反引号
- read -p 是用来接受用户输入的语句,后面跟变量名
- echo -e :是用来解析\t \n等等,不受强引弱引用的影响
b、位置参数
位置参数根据字面意思就是根据位置来取数字,用set来设置
那么如何来取对应位置的参数呢?没错echo来取1位置的就是echo $1 对应上图取出来的数字就是11
根据上图的一些特殊情况
echo $# | 定义的位置参数的个数 |
---|---|
echo \$$# | $4(由于$#解析出来的是4,则再加上前面的$就是$4) |
eval echo $$# | 14($#解析出来的是4,则再加上前面的$就是$4,再加上exal的在次扫描$4对应的位置参数是14) |
2、seq
a、格式
seq表示从某一个数到另一个数格式如下seq 首数 增量 尾数
b、参数
- -f 用frintf的浮点格式:
-f%5g
:表示占5个字符-f%-0g
:表示左对齐-fabc%5g
:表示再前面加abc之后占5个字符-f%05g
:表示前面如果只空的用 0来补齐
- -w:按最高位前补0
- -s:指定分隔符号
上图是以空格分割,那么如果想要以tab来分割改如何呢?
seq -s "`echo -e "\t"`"
对于分隔符用什么来引用,其实单引双引都可以,只要里面没有要解析的命令就可以用单引,如上题里面由要解析的命令得用弱引
3、生成随机自然数
对于如果想生成一个随机参数的话可以用linux的一个内部系统变量$RANDOM
,其范围是0-32767,如果想要生成自己指定范围的自然数,可以写一个shell脚本对其进行改造
4、awk生成
awk 'BEGIN{srand();print rand()*1000000}'
:可以根据要的数的大小来x1000000
5、opensel rand
通过加密来生成随机数和字符串,当然如果知道数字的话还可以通过加密来取数字openssl rand -base64 xxx
:加密xxx生成随机字符串openssl rand -base64 xxx |cksum
:生成数字openssl rand -base64 xxx |cksum|cut -c 1-8
:取前8个openssl rand -base64 xxx |md5sum |cut -c 1-5
:取1-5个字符串
6、从文件中取来加密成数字
可以从文件/dev/urandom里面来取cat /dev/urandom |head -n 10 |cksum |cut -c 1-8
7读取Linux的uuid码加密生成数字
UUID码全称是通用唯一识别码 (Universally Unique Identifier, UUID),UUID格式是:包含32个16进制数字,以“-”连接号分为五段,形式为8-4-4-4-12的32个字符。linux的uuid码也是有内核提供的,在/proc/sys/kernel/random/uuid这个文件内。cat/proc/sys/kernel/random/uuid每次获取到的数据都会不同。和上一个基本一样,不过是取的文件不一样cat /proc/sys/kernel/random/uuid |cksum|cut -f1 -d " "
8、从元素池中抽取数字
通过定义元素池,编写一个shell脚本来实现随机数的生成
三、随机生成uuid
1、cat /proc/sys/kernel/random/uuid
可以从这个文件中获取随机的uuid
2、输入uuidgen
来获取
四、生成MAC地址
echo "00:60:2F$(dd bs=1 count=3 if=/dev/random 2>/dev/null |hexdump -v -e '/1 ":%02X"')"
五、命令排序
- 不具有逻辑排序;只要前后有就会执行
- 具有逻辑排序&& ||
- &&前一个不对,后一个不执行
- ||前一个不论对不对都会执行
- & 将命令置于后台执行
- { }顺序输出 例:touch file{00…10}会依次建立10个文件,cp xxx {,.bak} 会将文件xxx赋值成xxx.bak文件