练习:
传递一个用户名参数给脚本,判断此用户的用户名跟其基本组的组名是否一致,并将结果显示出来。
18.1 字符(串)测试:
==:测试是否相等,相等为真,不等为假(等号两端必须要加空格)
!=: 测试是否不等,不等为真,等为假
>:测试一个字符串是否大于另外一个字符串
<:测试一个字符串是否小于另外一个字符串
-n string: 测试指定字符串是否为空,空则真,不空则假
-z string: 测试指定字符串是否不空,不空为真,空则为假
[root@Daniel-R480 ~]# A=hello
[root@Daniel-R480 ~]# B=hi
[root@Daniel-R480 ~]# [ "$A"=="B" ]
[root@Daniel-R480 ~]# echo $?
0
[root@Daniel-R480 ~]# [ "$A" == "B" ]
[root@Daniel-R480 ~]# echo $?
1
[root@Daniel-R480 ~]# [ "$A" = "$B" ]
[root@Daniel-R480 ~]# echo $?
1
#‘’代表着直接对比A和B
[root@Daniel-R480 ~]# [ '$A' = '$B' ]
[root@Daniel-R480 ~]# echo $?
1
[root@Daniel-R480 ~]# [ "$A" = "$B" ]
[root@Daniel-R480 ~]# echo $?
1
[root@Daniel-R480 ~]#
[root@Daniel-R480 ~]# [ "$A" != "$B" ]
[root@Daniel-R480 ~]# echo $?
0
[root@Daniel-R480 ~]#
练习:写一个脚本
传递一个参数(单字符就行)给脚本,如参数为q,就退出脚本;否则,就显示用户的参数;
练习:写一个脚本
传递一个参数(单字符就行)给脚本,如参数为q、Q、quit或Quit,就退出脚本;否则,就显示用户的参数;
#!/bin/bash
#
if [ $1 = 'q' ];then
echo "Quiting..."
exit 1
elif [ $1 = 'Q' ];then
echo "Quiting..."
exit 2
elif [ $1 = 'quit' ];then
echo "Quiting..."
exit 3
elif [ $1 = 'Quit' ];then
echo "Quiting..."
exit 4
else
echo $1
fi
18.2 组合测试条件
-a: 与关系
-o: 或关系
!: 非关系
if [ $# -gt 1 -a $# -le 3 ]
if [ $# -gt 1 ] && [ $# -le 3 ]
q, Q, quit, Quit
练习:
传递三个参数给脚本,第一个为整数,第二个为算术运算符,第三个为整数,将计算结果显示出来,要求保留两位精度。形如:
./calc.sh 5 / 2
练习:
传递3个参数给脚本,参数均为用户名。将此些用户的帐号信息提取出来后放置于/tmp/testusers.txt文件中,并要求每一行行首有行号。
写一个脚本:
判断当前主机的CPU生产商,其信息在/proc/cpuinfo文件中vendor id一行中。
如果其生产商为AuthenticAMD,就显示其为AMD公司;
如果其生产商为GenuineIntel,就显示其为Intel公司;
否则,就说其为非主流公司;
写一个脚本:
给脚本传递三个整数,判断其中的最大数和最小数,并显示出来。
MAX=0
MAX -eq $1
MAX=$1
MAX -lt $2
MAX=$2
18.3 for循环
循环:进入条件,退出条件
for
while
until
for 变量 in 列表; do
循环体
done
for I in 1 2 3 4 5 6 7 8 9 10; do
加法运算
done
遍历完成之后,退出;
如何生成列表:
(1){1..100}:直接通过数字列表
(2)`seq [起始数 [步进长度]] 结束数`:通过seq命令
[root@Daniel-R480 ~]# seq 3
1
2
3
[root@Daniel-R480 ~]# seq 5 10
5
6
7
8
9
10
[root@Daniel-R480 ~]# seq 2 2 10
2
4
6
8
10
[root@Daniel-R480 ~]#
#!/bin/bash
#
declare -i SUM=0
for I in {1..100};do
let SUM=$[$SUM+$I]
done
echo "The sum is : $SUM"
1,...,100
declare -i SUM=0
integer
-x
写一个脚本:
1、设定变量FILE的值为/etc/passwd
2、依次向/etc/passwd中的每个用户问好,并显示对方的shell,形如:
Hello, root, your shell: /bin/bash
[root@Daniel-R480 ~]# for I in `seq 1 $LINES`; do echo "Hello, `head -n $I /etc/passwd | tail -1 | cut -d: -f1`"; done
Hello, root
Hello, bin
Hello, daemon
Hello, adm
Hello, lp
Hello, sync
Hello, shutdown
Hello, halt
Hello, mail
Hello, operator
Hello, games
Hello, ftp
Hello, nobody
Hello, systemd-network
Hello, dbus
Hello, polkitd
Hello, rpc
Hello, rpcuser
Hello, nfsnobody
Hello, sshd
Hello, postfix
Hello, chrony
Hello, daniel
Hello, daniel
Hello, daniel
Hello, daniel
Hello, daniel
Hello, daniel
Hello, daniel
3、统计一共有多少个用户
for I in `seq 1 $LINES`; do echo "Hello, `head -n $I /etc/passwd | tail -1 | cut -d: -f1`"; done
只向默认shell为bash的用户问声好
写一个脚本:
1、添加10个用户user1到user10,密码同用户名;但要求只有用户不存在的情况下才能添加;
#!/bin/bash
#
for I in {1..10};do
if id user$I &>/dev/null; then
echo "user$I exists."
else
useradd user$I
echo user$I | passwd --stdin user$I &> /dev/null
fi
done
#!/bin/bash
#
for I in {1..10}; do
if id user$I &>/dev/null; then
userdel -r user$I
echo "Delete user$I finished."
else
echo "user$I not exist."
fi
done
扩展:
接受一个参数:
add: 添加用户user1..user10
del: 删除用户user1..user10
其它:退出
#!/bin/bash
#
if [ $# -lt 1 ];then
echo "Usage; adminusers --ARG"
exit 7
fi
if [ $1 == '--add' ];then
for I in {1..10}; do
if id user$I &> /dev/null; then
echo "user$I exists."
else
useradd user$I
echo user$I | passwd --stdin user$I &> /dev/null
echo "Add user$I finished."
fi
done
elif [ $1 == '--del' ]; then
for I in {1..10};do
if id user$I &> /dev/null;then
userdel -r user$I
echo "Delete user$I finished."
else
echo "No user$I."
fi
done
else
echo "Unknown ARG"
exit 8
fi
设置adminusers user1,user2,user3,hello,hi
#!/bin/bash
#
if [ $1 == '--add' ]; then
for I in `echo $2 | sed 's/,/ /g'`;do
if id $I &> /dev/null;then
echo "$I exists."
else
useradd $I
echo $I | passwd --stdin $I &> /dev/null
echo "add $I finished."
fi
done
elif [ $1 == '--del' ]; then
for I in `echo $2 | sed 's/,/ /g'`;do
if id $I &> /dev/null;then
userdel -r $I
echo "Delete $I finished."
else
echo "$I NOT exist."
fi
done
elif [ $1 == '--help' ]; then
echo "Usage:adminuser2.sh --add USER1,USER2,... | --del USER1,USER@@,..."
else
echo "Unknown options."
fi
写一个脚本:
计算100以内所有能被3整除的正整数的和;
取模,取余:%
3%2=1
100%55=45
写一个脚本:
计算100以内所有奇数的和以及所有偶数的和;分别显示之;
18.4 let命令和数据计算
let命令
let I=$[$I+1]
SUM=$[$SUM+$I]和let SUM+=$I是一个意思
let I+=1 相当于 let I++
[root@Daniel-R480 ~]# I=3
[root@Daniel-R480 ~]# let I++
[root@Daniel-R480 ~]# echo $I
4
[root@Daniel-R480 ~]# let I++
[root@Daniel-R480 ~]# echo $I
5
-=:表示=-相对应的数值
let I-=1 相当于 let I--
++I, --I
*=:表示=*相对应的数值
/=:表示=/相对应的数值
%=:表示=%(取余)相对应的数值
写一个脚本,
分别显示当前系统上所有默认shell为bash的用户和默认shell为/sbin/nologin的用户,并统计各类shell下的用户总数。显示结果形如:
BASH,3users,they are:
root,redhat,gentoo
NOLOGIN, 2users, they are:
bin,ftp
#!/bin/bash
#
NUMBASH=`grep "bash$" /etc/passwd | wc -l`
BASHUSERS=`grep "bash$" /etc/passwd | cut -d: -f1`
BASHUSERS=`echo $BASHUSERS | sed 's@[[:space:]]@,@g'`
echo "BASH, $NUMBASH users, they are:"
echo "$BASHUSERS
Comments Closed.