以上就是给各位分享Shell编程面试题4_批量创建Linux用户并设置密码,其中也会对linux批量创建用户和密码进行解释,同时本文还将给你拓展LinuxShell编程、LinuxShell编程自动化
以上就是给各位分享Shell编程面试题4_批量创建Linux用户并设置密码,其中也会对linux批量创建用户和密码进行解释,同时本文还将给你拓展Linux Shell编程、Linux Shell编程自动化运维实现——Shell循环、Linux Shell编程(3) - Shell 运算、Linux shell脚本 批量创建多个用户等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- Shell编程面试题4_批量创建Linux用户并设置密码(linux批量创建用户和密码)
- Linux Shell编程
- Linux Shell编程自动化运维实现——Shell循环
- Linux Shell编程(3) - Shell 运算
- Linux shell脚本 批量创建多个用户
Shell编程面试题4_批量创建Linux用户并设置密码(linux批量创建用户和密码)
老男孩出的Shell编程企业面试题4:
批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机8位字符串)。
我的Shell脚本如下:
#!/bin/bash for num in 01 02 03 04 05 06 07 08 09 10 do username=oldboy$num password=`head -c 500 /dev/urandom | md5sum | head -c 8` egrep "^$username" /etc/passwd >& /dev/null if [ $? -ne 0 ] then useradd $username echo $password | passwd $username --stdin &>/dev/null if [ $? -eq 0 ] then echo "$username:$password" fi fi done
运行结果如下:
[root@CentOS66 shellstudy]# ./creatuser.sh oldboy01:d7e86b4e3b oldboy02:7fbc6033fc oldboy03:aabd217934 oldboy04:bbe4b5a094 oldboy05:38041b6159 oldboy06:e51d10d669 oldboy07:c292390561 oldboy08:61badd5747 oldboy09:60eed14fda oldboy10:a5d5a6c1f6
Linux Shell编程
1、sed
2、awk
3、grep
4、shell变量
Linux Shell编程自动化运维实现——Shell循环
shell循环
for
语法结构
for 变量名 [ in 取值列表 ]
do
循环体
done
编写常规网络测试脚本
#!/bin/bash
#ping
ip=192.168.100.10
ping -c1 -W1 $ip &> /dev/null
if [ $? -eq 0 ] ;then
echo "$ip" |tee -a ip.txt
fi
因为测试对象多,所以使用循环。
#!/bin/bash
#ping
for i in {
2..254}
do
ip=192.168.100.$i
ping -c1 -W1 $ip &> /dev/null
if [ $? -eq 0 ] ;then
echo "$ip" |tee -a ip.txt
fi
done
优化脚本(后台执行,清空脚本,wait间隔)
#!/bin/bash
#ping
>ip.txt ##清空记录文本
for i in {
2..254}
do
{
ip=192.168.100.$i
ping -c1 -W1 $ip &> /dev/null
if [ $? -eq 0 ] ;then
echo "$ip" |tee -a ip.txt
fi
}& ##后台执行
done
wait ##等待前一个程序执行完毕。在执行下一个命令。
echo "finishi...."
通过用户列表文件创建用户
#!/bin/bash
#name
#time
pass=123
#判断脚本是否有参数
if [ $# -eq 0 ] ;then
echo "usage:$0 filename "
exit 1
fi
#判断用户输入的是否是文件
if [ ! -f $1 ];then
echo "error filename"
exit 2
fi
#设置循环,读取文件,创建用户
for user in `cat $1`
do
id $user &> /dev/null
#如果用户不存在,则创建用户,否则提示已经存在。
if [ $? -eq 0 ];then
echo "user $user already exists"
else
useradd $user
echo "$pass" | passwd --stdin $user &> /dev/null
#判断用户是否创建成功,并提示
if [ $? -eq 0 ] ; then
echo "$user is created."
fi
fi
done
使用for实现批量主机root密码的修改
要求1: 已经完成秘钥登录配置(ssh-keygen)
要求2:定义主机地址列表
要求3:并了解远程修改密码的方法
邀请用户输入新密码
#!/bin/bash
read -p "请用户输入新密码: " password
#循环调用IP地址
for i in $(cat ip.txt)
do
{
#测试IP是否在线
ping -c1 -W1 $i &> /dev/null
#在线IP进行修改
if [ $? -eq 0 ] ;then
#修改密码
ssh $i "echo $password | passwd --stdin root"
#修改成功与否并记录
if [ $? -eq 0 ] ;then
echo "$i" >> ok.txt
else
echo $i >> fail.txt
fi
#不在线的主机记录。
else
echo $i >> meigai.txt
fi
} &
done
- while until 循环次数不[一定]是固定的
- while 语句结构(死循环/逐行处理文件)
while 条件测试
do
循环体
done
当条件测试成立(条件测试为真),执行循环体
#!/bin/bash
while :
do
let i++
sleep 1
echo $i
done
- until语法结构
until 条件测试
do
循环体
done
当条件测试成立(条件测试为假视为成立),执行循环体
#!/bin/bash
until [[ $i -eq 14 ]]
do
let i++
sleep 1
echo $i
done
- expect
我们通过Shell可以实现简单的控制流功能,但对于需要交互的场合则必须通过人工操作,有时候我们可能会需要实现和交互程序如ssh服务器等进行交互的功能。而Expect就使用来实现这种功能的工具。
Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。
yum install -y expect tcl tclx tcl-devel 安装
通过expect解决ssh交互问题
通过expect编写脚本
#!/usr/bin/expect
spawn ssh root@192.168.0.111
expect {
"yes/no" {
send "yes\r";exp_continue }
"password:" {
send "666666\r" };
}
interact
登录验证免交互
expect 期望哪些内容
password 就send发送 centos
yes/no 就send发送 yes ,\r 表示回车
interact 允许用户交互
spawn expect 内部命令,启动一个shell程序。
exp_continue,跳过循环,就继续下一条语句。
expect例子:公钥推送
准备工作:安装expect,准备公钥
通过shell循环判断在线主机
#!/bin/bash
#创建一个IP地址文件。
>ip.txt
#使用for循环ping测试主机是否在线。
for i in {
2..254}
do
{
#请注意环境的IP地址,可能与示例中不同。
ip=192.168.0.$i
ping -c1 -W1 $ip &> /dev/null
if [ $? -eq 0 ];then
echo "$ip" >> ip.txt
fi
}&
done
cat ip.txt 观察在线主机
通过expect进行交互
#!/bin/bash
#创建一个IP地址文件。
>ip.txt
#使用for循环ping测试主机是否在线。
for i in {
2..254}
do
{
#请注意环境的IP地址,可能与示例中不同。
ip=192.168.122.$i
ping -c1 -W1 $ip &> /dev/null
if [ $? -eq 0 ];then
echo "$ip" >> ip.txt
/usr/bin/expect <<-EOF
set timeout 10
spawn ssh-copy-id $ip
expect {
"yes/no" {
send "yes\r"; exp_continue }
"password:" {
send "centos\r" }
}
expect eof
EOF
fi
}&
done
wait
echo "finishi..."
#!/usr/bin/expect
set timeout 10
spawn ssh-copy-id 192.168.122.152
expect {
"yes/no" {
send "yes\r"; exp_continue }
"password:" {
send "centos\r" }
}
#!/bin/bash
#创建一个IP地址文件。
>ip.txt
#检测expect是否安装,检测公钥是否创建。
rpm -q expect &> /dev/null
if [ $? -ne 0 ] ;then
yum install -y expect
fi
if [ ! -f ~/.ssh/id_rsa ];then
ssh-keygen -P "" -f ~/.ssh/id_rsa
fi
#使用for循环ping测试主机是否在线。之前插入安装和准备秘钥。
Linux Shell编程(3) - Shell 运算
一、declare 命令
shell 变量是弱类型,且默认都是字符串型
declare 命令可以给变量设定或取消类型
1. 语法
declare [-/+][选项] [变量名]
2. 选项
-
:给变量设定类型属性+
:取消变量的类型属性
-a
:将变量声明为数组类型(array)-i
:将变量声明为整数类型(integer)
-x
:将变量声明为环境变量-r
:将变量声明为证只读变量
-p
:显示指定变量的被声明的类型
3. 把变量声明为数值型
declare -i [变量名]
[root~]# a=1
[root~]# b=2
[root~]# declare -i c=$a+$b
[root~]# echo $c
3
[root~]# declare -p c
declare -i c="3"
4. 声明数组变量
定义数组
数组名[n]=值
declare -a 数组名[n]=值
注意,n只能是数字
查看数组
- ${数组名}:查看数组第一个元素,即array[0]的值
- ${数组名[n]}:n为数字,查看数组指定下标的值
- ${数组名[*]}:查看数组中所有的值
删除数组
- 删除数组指定下标的值
unset 数组名[n]
- 删除整个数组
unset 数组名
实例
- 定义数组下标[2]和下标[3],没有定义下标[0]
[root~]# array[2]=2
[root~]# declare -a array[3]=3
- 查看数组第一个元素,即array[0]的值,因为没有,所以输出为空
[root~]# echo ${array}
- 查看数组下标[3]的值
[root~]# echo ${array[3]}
3
- 查看数组中所有的值
[root~]# echo ${array[*]}
2 3
- 定义数组下标[0]的值,并输出
[root~]# array[0]=0
[root~]# echo ${array}
0
[root~]# echo ${array[*]}
0 2 3
- 删除数组下标[3]
[root~]# unset array[3]
[root~]# echo ${array[*]}
0 2
- 删除整个数组
[root~]# unset array
[root~]# echo ${array[*]}
5. 声明环境变量
export 变量名=变量值
declare -x 变量名=变量值
6. 声明变量只读属性
具有只读属性的变量不能修改,不能删除,甚至不能取消只读属性!
实例
- 声明变量只读属性
[root~]# declare -r var="I am a readonly variable"
- 不能修改
[root~]# var=change
-bash: var: readonly variable
- 不能删除
[root~]# unset var
-bash: unset: var: cannot unset: readonly variable
- 不能取消只读属性
[root~]# declare +r var
-bash: declare: var: readonly variable
7. 查询变量的属性
查询所有变量的属性
declare -p
查询指定变量的属性
declare -p [变量名]
实例
[root~]# declare -p
declare -- BASH="/bin/bash"
...省略...
declare -ir UID="0"
declare -x USER="root"
declare -x USERNAME="root"
[root~]# declare -p BASH
declare -- BASH="/bin/bash"
[root~]# declare -p PATH
declare -x PATH="/sbin:/bin:/usr/sbin:/usr/bin"
二、数值运算的方法
1. declare -i sum=$num1+$num2
[root~]# num1=1
[root~]# num2=2
[root~]# declare -i sum=$num1+$num2
[root~]# echo $sum
3
2. expr
expr
用法
sum=$(expr $num1 + $num2)
[root~]# num1=1
[root~]# num2=2
[root~]# sum=$(expr $num1 + $num2)
[root~]# echo $sum
3
-
expr
运算符中间必须有空格,否则:
[root~]# sum=$(expr $num1+$num2)
[root~]# echo $sum
1+2
3. let
let
用法
let [变量名]=[运算式]
[root~]# let sum=$num1+$num2
[root~]# echo $sum
3
[root~]# let num=(1+2)*3/4+5
[root~]# echo $num
7
4. $((运算式))
或 $[运算式]
(常用)
$((运算式))
[root~]# a=1
[root~]# b=2
[root~]# c=$(($a+$b))
[root~]# echo $c
3
- 运算符中间也可以加空格
[root~]# c=$(( $a + $b ))
[root~]# echo $c
3
$[运算式]
[root~]# c=$[$a+$b]
[root~]# echo $c
3
- 运算符中间也可以加空格
[root~]# c=$[ $a + $b ]
[root~]# echo $c
3
5. 运算符优先级
运算符优先级从高到低排序
运算符 | 说明 |
---|---|
- , +
|
单目负,单目正 |
! , ~
|
逻辑非,按位取反或补码 |
* , / , %
|
乘,除,取余 |
+ , -
|
加,减 |
<< , >>
|
按位左移,按位右移 |
< , > , <= , >=
|
小于,大于,小于等于,大于等于 |
== , !=
|
等于,不等于 |
& |
按位与 |
^ |
按位异或 |
| | 按位或 |
&& |
逻辑与 |
|| | 逻辑或 |
= , += , -= , *= , /= , %= ,&= , ^= , |= , <<= , >>=
|
赋值、运算且赋值 |
优先级相同的,从左到右运算。
有小括号的,先算小括号里面的。
实例
- 加。减、乘、除、取余、小括号
[root~]# a=$(( 4 + 5 * 3 / 2 ))
[root~]# echo $a
11
[root~]# b=$(( (4 + 5) * 3 / 2 ))
[root~]# echo $b
13
[root~]# c=$(( (4 + 5) * 3 % 5 ))
[root~]# echo $c
2
[root~]# d=$(( (4 + 5) * 3 / (2 + 1) ))
[root~]# echo $d
9
- 按位与
[root~]# e=$(( 1 & 0 ))
[root~]# echo $e
0
- 按位或
[root~]# f=$(( 1 | 0 ))
[root~]# echo $f
1
- 按位异或
[root~]# g=$(( 1 ^ 2 ))
[root~]# echo $g
3
三、变量测试
变量测试一般在脚本优化时使用。格式复杂多样,语法简单。
1. 变量测试表
2. 实例
以变量测试表第一行 {x=${y-n}}
为例
- 变量y没有设置时,x=n
[root~]# unset y
[root~]# x=${y-1}
[root~]# echo $x
1
- 变量y为空值时,x=空值
[root~]# y=''''
[root~]# x=${y-1}
[root~]# echo $x
- 变量y有值时,x=$y
[root~]# y=2
[root~]# x=${y-1}
[root~]# echo $x
2
Linux shell脚本 批量创建多个用户
Linux shell脚本 批量创建多个用户
1 #!/bin/bash
2 groupadd charlesgroup
3 for username in charles1 charles2 charles3
4 do
5 useradd -G charlesgroup $username
6 echo "baitang" | passwd --stdin $username
7 done
如有问题,欢迎纠正!!!
如有转载,请标明源处:https://www.cnblogs.com/Charles-Yuan/p/9847053.html
我们今天的关于Shell编程面试题4_批量创建Linux用户并设置密码和linux批量创建用户和密码的分享已经告一段落,感谢您的关注,如果您想了解更多关于Linux Shell编程、Linux Shell编程自动化运维实现——Shell循环、Linux Shell编程(3) - Shell 运算、Linux shell脚本 批量创建多个用户的相关信息,请在本站查询。
本文标签: