1.4.4 shift实践
学习目标
这一节,我们从 基础知识、简单实践、小结 三个方面来学习。
基础知识
简介
shift是一个特殊的循环控制命令,它的特点主要是依次从输入信息列表中获取相关的参数数据值,然后走循环。
语法解读
continue语法格式:
for 循环列表
do
...
shift
done
注意:
shift 从用户输入的信息中提取第一个位置的数据内容,每走一个循环,从下一个位置获取输入参数
简单实践
实践1-依次获取所有参数的内容
查看脚本效果
[root@localhost ~]# cat shift_get_args.sh
#!/bin/bash
#功能:shift依次从输入的参数列表中获取内容
# 定制一套循环逻辑,直到参数位置内容为空
until [ -z "$1" ]
do
echo "脚本的第1个位置参数内容是: $1, 当前脚本参数数量: $#"
# 接收完第一个参数后,直接将起始值移至下一个位置
shift
done
脚本执行效果
[root@localhost ~]# /bin/bash shift_get_args.sh aa bb cc dd ee
脚本的第1个位置参数内容是: aa, 当前脚本参数数量: 5
脚本的第1个位置参数内容是: bb, 当前脚本参数数量: 4
脚本的第1个位置参数内容是: cc, 当前脚本参数数量: 3
脚本的第1个位置参数内容是: dd, 当前脚本参数数量: 2
脚本的第1个位置参数内容是: ee, 当前脚本参数数量: 1
结果显示:
每次从脚本的第一个位置获取的内容在逐渐变化中。
实践2-创建指定的系统用户
查看脚本效果
[root@localhost ~]# cat shift_add_user.sh
#!/bin/bash
# 功能:shift批量创建指定的用户
# 提示:
# /dev/random和/dev/urandom设备文件会生成随机数,第一个依赖系统中断
# 定制普通变量
user_file='/tmp/user.txt'
# 保证文件可用
[ -f ${user_file} ] && > ${user_file}
# 定制批量创建用户的业务逻辑
if [ $# -ne 0 ]
then
# 注意: 这里用的是 -n,后面的$1两侧要有"",如果用until语句的话使用 -z表达式
while [ -n "$1" ]
do
# 创建用户
useradd $1
# 生成密码
password=$(head /dev/urandom | tr -dc '[:alnum:]' | head -c 8)
# 为用户添加密码
echo ${password} | passwd --stdin $1 > /dev/null 2>&1
# 信息输出
echo "用户: $1, 密码: ${password}" >> ${user_file}
echo -e "\e[31m用户 $1 创建成功\e[0m"
# 移动输入参数
shift
done
else
echo -e "\e[31mUsage: /bin/bash $0 arg_list\e[0m"
fi
查看脚本执行效果
[root@localhost ~]# /bin/bash shift_add_user.sh
Usage: /bin/bash shift_add_user.sh arg_list
[root@localhost ~]# /bin/bash shift_add_user.sh zhangsan lisi wangwu zhaoliu
用户 zhangsan 创建成功
用户 lisi 创建成功
用户 wangwu 创建成功
用户 zhaoliu 创建成功
[root@localhost ~]# cat /tmp/user.txt
用户: zhangsan, 密码: 4m4njspn
用户: lisi, 密码: sFEFcecC
用户: wangwu, 密码: rsDmtkcQ
用户: zhaoliu, 密码: Ehsj2fZo