首页 > 代码库 > 脚本和算术运算的小练习

脚本和算术运算的小练习

练习

1)写一个脚本,计算/etc/passwd文件中的第10个用户和第20个用户的ID之和

2)写一个脚本,计算/etc/rc.d/rc.sysinit及/etc/rc.d/init.d/functions文件中所有空白行之和

3)写一个脚本,传递两个文件路径作为参数给脚本,计算两个文件中所有空白行之和

4)统计 /etc,/var,/usr目录中共有多少个一级子目录和文件?


1)写一个脚本,计算/etc/passwd文件中的第10个用户和第20个用户的ID之和

[root@izpo45bh60h6bsz scripts]# nano adduserid.sh
#!/bin/bash

sum=

#变量不能以数字开头
#命令引用实现赋值
uid10=`head -n 10 /etc/passwd | tail -n 1 | cut -d‘:‘ -f3`
uid20=$(head -n 20 /etc/passwd | tail -n 1 | cut -d‘:‘ -f3)

#算术运算表达式
let sum=$uid10+$uid20
echo "let expression: $sum"
sum=$[$uid10+$uid20]
echo " 变量引用实现赋值\$[算术表达式]:$sum"
sum=$(($uid10+$uid20))
echo "变量引用实现赋值\$((算术表达式)): $sum"
sum=$(expr $uid10 + $uid20)
echo "命令引用实现赋值\$(命令): $sum"

运算结果:

# bash adduserid.sh
let expression: 100
变量引用实现赋值$[算术表达式]:100
变量引用实现赋值$((算术表达式)): 100
命令引用实现赋值$(命令): 100

2)写一个脚本,计算/etc/rc.d/rc.sysinit及/etc/rc.d/init.d/functions文件中所有空白行之和

[root@izpo45bh60h6bsz scripts]# nano addblank.sh
#!/bin/bash
blank1=
blank2=
sum=
name1=/etc/rc.d/rc.sysinit
name2=/etc/rc.d/init.d/functions

##命令引用实现赋值
blank1=`grep -c ‘^[[:space:]]*$‘ $name1`
blank2=$(grep -c ‘^[[:space:]]*$‘ $name2)

#算术运算表达式
let sum=$blank1+$blank2
echo "let expression: $sum"
sum=$[$blank1+$blank2]
echo " 变量引用实现赋值\$[算术表达式]:$sum"
sum=$(($blank1+$blank2))
echo "变量引用实现赋值\$((算术表达式)): $sum"
sum=$(expr $blank1 + $blank2)
echo "命令引用实现赋值\$(命令): $sum"

运行结果 :

[root@izpo45bh60h6bsz scripts]# bash addblank.sh
let expression: 188
变量引用实现赋值$[算术表达式]:188
变量引用实现赋值$((算术表达式)): 188
命令引用实现赋值$(命令): 188

3)写一个脚本,传递两个文件路径作为参数给脚本,计算两个文件中所有空白行之和

cat 连接文本文件,显示到标准输出

root@izpo45bh60h6bsz scripts]# cat addblank3.sh 
#!/bin/bash
blanks=$(cat $1 $2 | grep -c ‘^[[:space:]]*$‘)
echo "$1 and $2 has $blanks blanklines"

运算结果:

[root@izpo45bh60h6bsz scripts]# bash addblank3.sh /etc/rc.d/rc.sysinit /etc/rc.d/init.d/functions 
/etc/rc.d/rc.sysinit and /etc/rc.d/init.d/functions has 188 blanklines


4)统计 /etc,/var,/usr目录中共有多少个一级子目录和文件?

[root@izpo45bh60h6bsz scripts]# nano count.sh 
#!/bin/bash
sum=
#命令引用实现赋值
count1=$(ls $1 | wc -l)
#let 算术运算表达式
let sum=$sum+$count1
#换港符,shift默认将传递给脚本的参数,踢一个
shift

#命令引用实现赋值
count1=`ls $1 | wc -l`
#变量引用实现赋值
sum=$[$sum+$count1]
shift

count1=$(ls $1 | wc -l)
#命令引用实现赋值
sum=$(expr $sum + $count1)

echo "The sum of filecounts: $sum"

执行的结果 

[root@izpo45bh60h6bsz scripts]# bash count.sh /etc /var /usr
The sum of filecounts: 287
[root@izpo45bh60h6bsz scripts]# ls /etc | wc -l
249
[root@izpo45bh60h6bsz scripts]# ls /var | wc -l
26
[root@izpo45bh60h6bsz scripts]# ls /usr | wc -l
12


本文出自 “Reading” 博客,请务必保留此出处http://sonlich.blog.51cto.com/12825953/1952923

脚本和算术运算的小练习