shell基础之数组、随机数

这篇博客介绍了Shell中的数组操作,包括动态定义数组、打印与输出数组元素、赋值、删除、截取与替换。同时讲解了如何生成随机数,如RANDOM变量和openssl命令生成随机字符。还提供了两个练习,涉及数组遍历和随机字符串生成的应用场景。

1.数组定义方法:

动态定义数组变量,并使用命令的输出结果作为数组的内容

2.数组的打印和输出

1)打印数组元素

*和@符表示打印所有元素,打印某个元素取其下标即可,数组下标从0开始

2)打印元素个数

echo ${#array[*]}  |  echo ${#array[@]}

3)数组的赋值

注意:如果下标不存在,则自动添加一个新的元素,如果存在,则覆盖原来的值

4)数组的删除

指定下标即删除某个元素,不指定删除整个数组,注意当指定下标元素删除后,其位置之后元素下标并不会改变

5)数组内容截取和替换

练习:循环输出数组元素

练习:利用for循环打印下面这句话中字母个数小于6的单词
I am westos teacher welcome to westos training class

#!/bin/bash array=(I am westos tescher welcome to westos training class) ##定义数组元素 
for ((i=0;i<${#array[@]};i++))     ##循环遍历数组元素 
do
   if [ ${#array[$i]} -lt 6 ];then  ##遍历每个字母,统计数组中每个字母的个数
   echo   ${array[$i]}
fi 
done

二、随机数

RANDOM生成随机数在0~32767之间,openssl rand -base64 40生成随机字符

练习:使用for循环在/westos目录下批量创建10个html文件,其中每个文件需要包含10个随即小写字母加固定字符串westos

#!/bin/bash
Path=/westos   ##文件目录
[ -d "$Path" ] || mkdir -p $Path  ##没有此路径则创建

for i in `seq 10`   ##循环10次
do
    random=$(openssl rand -base64 40 | sed 's/[^a-z]//g' | cut -c 3-12) ##生成64位随机字符串取40位,过滤掉不是以字母开头的再取其3-12位
    touch $Path/${random}_westos.html  ##创建随机数加固定字符串westos的.html文件
done

练习:创建10个用户,用户名为westos_{1…10}.密码随机

#!/bin/bash
. /etc/init.d/functions  ##调用系统库函数

user="westos"   ##定义用户名
passfile="/mnt/user.log" ##密码保存文件

for num in `seq -w 10`  ##-w生成数前面补零
do
    pass="`echo $RANDOM | md5sum | cut -c 3-12`" ##随机数再mmd5加密取10位,生成密码
    useradd $user$num &> /dev/null && {           ##创建10个用户
        echo "$pass" | passwd --stdin $user$num &> /dev/null  ##设定密码
        echo -e "user:$user$num\tpasswd:$pass" >> $passfile   ##将密码保存到定义文件
    }

if [ $? -eq 0 ];then  ##判断执行是否成功
    action "$user$num is ok" /bin/true  ##如果建立成功,就输出ok 
else
    action "$user$num is failed" /bin/false  ##失败输出failed
fi
done

回答: 在shell中,可以通过自定义数组来实现随机生成。首先,你可以创建一个包含数字和字母的自定义数组,例如array=(0 1 2 3 4 5 6 7 8 9 A B C D E F)。然后,你可以使用系统的$RANDOM变量来生成一个随机数,通过取余数的方式从数组中选择一个元素,构成新的随机字符串。例如,randnum=${array\[$((RANDOM%num))\]}。这样,你就可以通过循环来生成任意长度的随机字符串了。\[2\] 另外,还有其他方法可以生成随机字符串。例如,你可以使用date命令生成一个时间戳,然后通过md5sum计算出一个哈希值,再截取其中的一部分作为随机字符串。示例代码如下: ``` date +%s%N | md5sum | cut -c 1-10 ``` 你也可以使用/dev/urandom文件来生成随机字符串。通过读取该文件的内容,并使用head命令和md5sum计算出一个哈希值,再截取其中的一部分作为随机字符串。示例代码如下: ``` cat /dev/urandom | head -n 10 | md5sum | cut -c 1-10 ``` 这些方法都可以用于生成随机字符串,你可以根据具体需求选择适合的方法。\[3\] #### 引用[.reference_title] - *1* *2* *3* [Linux | Shell | 生成随机数随机字符串的7种方法](https://blog.youkuaiyun.com/qq_45631520/article/details/104496308)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值