linux-bash编程(字符串测试 和 for循环)
练习:
传递一个用户名参数给脚本,判断此用户的用户名跟其基本组的组名是否一致,并将结果显示出来。
(1)
字符测试:
==:测试是否相等,相等为真,不等为假
!=: 测试是否不等,不等为真,等为假
>
<
-n string: 测试指定字符串是否为空,空则真,不空则假
-z string: 测试指定字符串是否不空,不空为真,空则为假
练习:写一个脚本
传递一个参数(单字符就行)给脚本,如参数为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 例: 1, echo "scale=2;111/22;" | bc //保留2位小数,通过计算器bc计算111/22的值(方法1)。 2, bc <<< "scale=2;111/22;" //保留2位小数,通过计算器bc计算111/22的值(方法2)。
练习:
传递三个参数给脚本,第一个为整数,第二个为算术运算符,第三个为整数,将计算结果显示出来,要求保留两位精度。形如:
./calc.sh 5 / 2
练习:
传递3个参数给脚本,参数均为用户名。将此些用户的帐号信息提取出来后放置于/tmp/testusers.txt文件中,并要求每一行行首有行号。
写一个脚本:
判断当前主机的CPU生产商,其信息在/proc/cpuinfo文件中vendor id一行中。
如果其生产商为AuthenticAMD,就显示其为AMD公司;
如果其生产商为GenuineIntel,就显示其为Intel公司;
否则,就说其为非主流公司;
(2)
循环:进入条件,退出条件
for
while
until
(3)
for 变量 in 列表; do
循环体
done
例:
for I in 1 2 3 4 5 6 7 8 9 10; do
加法运算
done
遍历完成之后,退出;
(4) 如何生成列表:
{1..100} //生成整数列表的方法1
`seq [起始数 [步进长度]] 结束数` //生成整数列表的方法2
(5)
bashshell不支持浮点数运算,同时bash shell默认的数据类型为字符型。
(6)
bash shell声明整形的方法:
declare -i SUM=0 //此处的-i为 integer
或:
let sum=0
写一个脚本:
1、设定变量FILE的值为/etc/passwd
2、依次向/etc/passwd中的每个用户问好,并显示对方的shell,形如:
Hello, root, your shell: /bin/bash
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,密码同用户名;但要求只有用户不存在的情况下才能添加;
扩展:
接受一个参数:
add: 添加用户user1..user10
del: 删除用户user1..user10
其它:退出
adminusers user1,user2,user3,hello,hi
#!/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 echo "Add user user$i finished." fi done
写一个脚本:
计算100以内所有能被3整除的正整数的和;
取模,取余:%
3%2=1
100%55=45
写一个脚本:
计算100以内所有奇数的和以及所有偶数的和;分别显示之;
let I=$[$I+1] SUM=$[$SUM+$I] let SUM+=$I let I+=1 相当于 let I++ -= 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