Bash Shell中的for循环和运算表达式应用
1、写一个脚本 实现以下功能: 接受一个以上文件路径作为参数, 显示每个文件拥有的行数,总结说明本次共为几个文件统计了其行数。
设定此脚本至少需要一个参数并给出提示,$#
表示参数的个数。
将脚本提供的所有参数组成一个列表放入for语句依次进行循环执行echo "$i has $(wc -l $i | cut -d" " -f1) lines."
,$\*
表示所有的参数。
#!/bin/bash # [ $# -eq 0 ] && echo "At least on path." && exit 1 for i in $*;do echo "$i has $(wc -l $i | cut -d" " -f1) lines." done echo "A total of $# files were counted."
2、写一个脚本:传递两个以上字符串当作用户名; 创建这些用户;且密码同用户名;总结说明共创建了几个用户。依然使用$#
来判断参数个数,要求至少输入3个字符串作为用户名。然后将全部参数传递给for进行遍历,循环执行useradd
和passwd
指令完成用户创建,最后使用$#
显示一共添加了多少个用户。
#!/bin/bash # [ $# -lt 2 ] && echo "At least gave there strings." && exit 1 for i in $*;do useradd $i echo $i | passwd --stdin $i done echo "$# users added."
3、写一个脚本,新建20个用户,visitor1-visitor20;计算他们的ID之和。
使用for循环语句遍历1-20的列表,依次创建用户,然后使用for循环提取出每个用户的ID,然后作为计算表达式的参数进行算术运算。
#!/bin/bash # for i in {1..20};do for id in $(useradd visitor$i | id -u visitor$i);do let sum+=${id} done done echo "Sum:$sum."
4、写一脚本,分别统计/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#号开头的行数之和,以及总的空白行数。
写一个脚本可以根据给定的文件绝对路径,计算出每个文件中以#开头的行数和空白行数,然后求和,并显示出来。
#!/bin/bash # [ $# -eq 0 ] && echo "At lease give one absolute path." && exit 1 for i in $*;do for n in $(grep "^#" $i | wc -l);do let sum1+=$n done done echo "There are $sum1 lines that begins with "#"." for j in $*;do for m in $(grep "^$" $j | wc -l);do let sum2+=$m done done echo "There are $sum2 space lines."
以上为运行结果示例。
5、写一个脚本,显示当前系统上所有默认shell为bash的用户的用户名、UID以及此类所有用户的UID之和。
#!/bin/bash # grep "bash\>$" /etc/passwd | cut -d: -f1,3 for i in $(grep "bash\>$" /etc/passwd | cut -d: -f1,3 | cut -d: -f2);do let sum+=$i done echo "User ID Sum is:$sum."
以下为脚本执行结果:
[lantian@bogon ~]$ bash useridsum.sh root:0 lantian:1000 centos:1002 bash:1003 testbash:1004 user2:1006 user3:1007 mageia:1100 openstack:3003 user4:3005 user5:3006 hadoop:3007 basher:3008 user1:3010 user10:3011 user11:3012 user12:3013 user13:3014 user14:3015 user15:3016 user16:3017 user17:3018 user18:3019 user19:3020 123456789:3021 usera:3022 userb:3023 userc:3024 user90:3025 user91:3026 user92:3027 visitor1:3028 visitor2:3029 visitor3:3030 visitor4:3031 visitor5:3032 visitor6:3033 visitor7:3034 visitor8:3035 visitor9:3036 visitor10:3037 visitor11:3038 visitor12:3039 visitor13:3040 visitor14:3041 visitor15:3042 visitor16:3043 visitor17:3044 visitor18:3045 visitor19:3046 visitor20:3047 User ID Sum is:137234.
6、写一个脚本,显示当前系统上所有拥有附加组的用户,并说明共有多少个此类用户。
使用id -G USERNAME
统计其输入几个组ID的方式逐个判断用户是否有附加组,USERNAME的来源为/etc/passwd文件的第1列(cut
)截取。具体脚本如下:
#!/bin/bash # for i in $(cat /etc/passwd | cut -d: -f1);do if [ $(id -G $i | wc -w) -gt 1 ];then echo $i let count++ fi done echo "Total users:$count."
原创文章,作者:N24_lantian,如若转载,请注明出处:http://www.178linux.com/63508
评论列表(1条)
赞,几个脚本都写的比较好~~继续加油~