四、shell编程练习题(1-20)
1、写一个脚本脚本可以接受一个以上的文件路径作为参数;
显示每个文件所拥的行数;
显示本次共对多少个文件执行了行数统计。
#!/bin/bash
for file in $*; do
lines=`wc -l $file | cut -d' ' -f1`
echo "$file has $lines lines."
done
echo "$# files."
运行结果:
# sh 1.sh /etc/inittab
/etc/inittab has 26 lines.
1 files.
2、分别计算100以内所有偶数之和和奇数之和
#!/bin/bash
eve=0
odd=0
for((i=1;i/dev/null ;then
echo "$username 的id为`grep "^\" /etc//passwd | cut -d: -f3`"
else #由于51cto关键字限制,去掉一个'/'
echo "无此用户"
fi
运行结果:
# sh 9.sh
请输入用户名:mysql
mysql 的id为496
# sh 9.sh
请输入用户名:123
无此用户
10、通过命令行传递两个整数参数给脚本,脚本可以返回其大者
#!/bin/bash
read -p "请输入两个整数:" a1 a2
if [ $a1 -gt $a2 ];then
echo $a1
else
echo $a2
fi
运行结果:
# sh 10.sh
请输入两个整数:11 16
16
# sh 10.sh
请输入两个整数:78 16
78
11、通过命令行传递任意个整数给脚本,脚本可以返回其大者
#!/bin/bash
declare -i num=0
for i in $@ ;do
if [ $i -gt $num ];then
let num=i
fi
done
echo "最大数为:$num"
运行结果:
# sh 11.sh 7978 991 31 3321 32
最大数为:7978
# sh 11.sh 78 991 31 3321 32
最大数为:3321
12、通过命令行给定一个文件路径,而后判断:如果此文件中存在空白行,则显示其空白行的总数;否则,则显示无空白行
#!/bin/bash
if grep "^[[:space:]]*$" $1 &>/dev/null ;then
echo "$1 has $(grep "^[[:space:]]*$" $1 | wc -l) blank lines."
else
echo "No blank lines."
fi
运行结果:
# sh 12.sh /etc//passwd #由于51cto关键字限制,去掉一个'/'
No blank lines.
# sh 12.sh /etc/inittab
No blank lines.
# sh 12.sh /etc/rc.sysinit
/etc/rc.sysinit has 103 blank lines.
13、传递一个参数给脚本:
如果参数为quit,则显示说你要退出;
如果参数为yes,则显示说你要继续;
其它任意参数,则说无法识别。
#!/bin/bash
case $1 in
quit|Q)
echo "退出程序"
;;
yes|Y)
echo "继续"
;;
*)
echo "无法识别"
;;
esac
运行结果:
# sh 13.sh
无法识别
# sh 13.sh quit
退出程序
# sh 13.sh yes
继续
14、传递一个用户名给脚本:
如果此用户的id号为0,则显示说这是管理员;
如果此用户的id号大于等于500,则显示说这是普通用户
否则,则说这是系统用户;
#!/bin/bash
if id $1 &>/dev/null ;then
userid=` grep "^\" /etc//passwd | cut -d: -f3 `#由于51cto关键字限制,去掉一个'/'
if [ $userid -eq 0 ];then
echo "$1 是管理员."
elif [ $userid -ge 500 ];then
echo "$1 是普通用户."
else
echo "$1 是系统用户."
fi
else
echo “无此用户.”
fi
运行结果:
# sh 14.sh mysql
mysql 是系统用户.
#
# sh 14.sh mysql
mysql 是系统用户.
# sh 14.sh root
root 是管理员.
# sh 14.sh nfsnobody
nfsnobody 是普通用户.
# sh 14.sh nfsnobo
“无此用户.”
15、给定一个用户,如果其shell为/bin/bash且其ID号大于等于500,则说这是一个可登录普通用户;否则,则显示其为非登录用户或管理员。
#!/bin/bash
if id $1 &> /dev/null ;then
userid=`grep "^\" /etc//passwd | cut -d: -f3` #由于51cto关键字限制,去掉一个'/'
usershell=`grep "^\" /etc//passwd | cut -d: -f7`#由于51cto关键字限制,去掉一个'/'
if [ $userid -ge 500 ] && [ "$usershell"=="/bin/bash" ];then
echo "$1 是可登录普通用户"
else
echo "$1 是非登陆用户或管理员"
fi
else
echo "无此用户."
fi
运行结果:
# sh 15.sh root
root 是非登陆用户或管理员
# sh 15.sh mysql
mysql 是非登陆用户或管理员
# sh 15.sh nfsnobody
nfsnobody 是可登录普通用户
# sh 15.sh nfsnobo
无此用户.
16、写一个脚本,如果某用户不存在,就添加
#!/bin/bash
if id $1 &> /dev/null ;then
echo "$1 已存在."
else
useradd $1
echo "添加用户$1."
fi
运行结果:
# sh 16.sh mysql
mysql 已存在.
# sh 16.sh mylinux
添加用户mylinux.
# tail -1 /etc//passwd#由于51cto关键字限制,去掉一个'/'
mylinux:x:500:500::/home/mylinux:/bin/bash
17、添加10个用户:tuser501-tuser510;如果用户不存在,才添加;如果存在,则显示已经有此用户;显示一共添加了多少个用户。
#!/bin/bash
declare -i num=0
for i in {501..510};do
if id tuser$i &> /dev/null ;then
echo "tuser$i 已存在"
else
useradd tuser$i
echo "添加用户 tuser$i"
let num++
fi
done
echo "添加$num 个用户."
运行结果:
# sh 17.sh
添加用户 tuser501
添加用户 tuser502
添加用户 tuser503
添加用户 tuser504
添加用户 tuser505
添加用户 tuser506
添加用户 tuser507
添加用户 tuser508
添加用户 tuser509
添加用户 tuser510
添加10 个用户.
# sh 17.sh
tuser501 已存在
tuser502 已存在
tuser503 已存在
tuser504 已存在
tuser505 已存在
tuser506 已存在
tuser507 已存在
tuser508 已存在
tuser509 已存在
tuser510 已存在
添加0 个用户.
18、添加10个用户:tuser601-tuser610;如果用户不存在,才添加,并以绿色显示添加成功;如果存在,则以红色显示已经有此用户;显示一共添加了多少个用户。
#!/bin/bash
#
declare -i count=0
for i in {601..610}; do
if id tuser$i &> /dev/null; then
echo -e "\033[31mtuser$i\033[0m exists."
else
useradd tuser$i
echo -e "add user \033[32mtuser$i\033[0m successfully."
let count++
fi
done
echo "Total add $count users."
运行结果:
# sh 18.sh
add user tuser601 successfully.
add user tuser602 successfully.
add user tuser603 successfully.
add user tuser604 successfully.
add user tuser605 successfully.
add user tuser606 successfully.
add user tuser607 successfully.
add user tuser608 successfully.
add user tuser609 successfully.
add user tuser610 successfully.
Total add 10 users.
# sh 18.sh
tuser601 exists.
tuser602 exists.
tuser603 exists.
tuser604 exists.
tuser605 exists.
tuser606 exists.
tuser607 exists.
tuser608 exists.
tuser609 exists.
tuser610 exists.
Total add 0 users.
19、传递用户名给脚本
判断此用户的shell是否为/bin/bash,如果是,则显示此用户为basher
否则,则显示此用户为非basher
#!/bin/bash
#
userShell=`grep "^$1\>" /etc//passwd | cut -d: -f7`#由于51cto关键字限制,去掉一个'/'
if [ "$userShell" == '/bin/bash' ]; then
echo "basher"
else
echo "not basher"
fi
运行结果:
# sh 19.sh mysql
not basher
# sh 19.sh mylinux
basher
20、给定一个文件路径
判断此文件是否存在;不存在,则说明文件不存,并直接结束脚本;
如果文件是否普通文件,则显示为“regular file”;
如果文件是目录,则显示为“directory”;
如果文件是链接文件,则显示为“Symbolic file";
否则,则显示为“unknown type.”
#!/bin/bash
if [ ! -e $1 ];then
echo "file not exit ."
exit 5
fi
if [ -L $1 ];then
echo "Symbolic file."
elif [ -d $1 ];then
echo "directory."
elif [-f $1 ];then
echo "regular file."
else
echo "unknown type."
fi
运行结果:
# sh 20.sh /etc/
directory.
# sh 20.sh /etc/rc.d/rc1.d/K92iptables
Symbolic file.
# sh 20.sh 12312
file not exit .
页:
[1]