linux学习之shell练习
1、描述shell程序的运行原理(可附带必要的图形说明);
2、总结shell编程中所涉及到的所有知识点(如:变量、语法、命令状态等等等,要带图的哟);
总结文章:http://pizimsn.blog.51cto.com/7002551/1697671
3、总结课程所讲的所有循环语句、条件判断的使用方法及其相关示例;(if (jpg|png is not exist);echo ”You say a XX“)
总结文章:http://pizimsn.blog.51cto.com/7002551/1698001
4、总结文本处理工具sed及awk的用法;(必须附带示例)
总结文章:http://pizimsn.blog.51cto.com/7002551/1698005
5、写一个脚本:如果某路径不存在,则将其创建为目录;否则显示其存在,并显示内容类型;(不要怀疑,就是这么简单)
[root@pizi ~]# bash a.sh /root/test/ 这个路径是存在的 drwxr-xr-x. 2 root root 4096 9月 24 20:58 /root/test/ [root@pizi ~]# cat a.sh #!/bin/bash #首行固定格式 #第5题 判断路径是否存在 dirname="/root/test/" if [ -e $dirname ];then echo "$dirname 这个路径是存在的" echo `ls -ld $dirname` else mkdir -p $dirname fi [root@pizi ~]#
6、写一个脚本,完成如下功能;判断给定的两个数值,孰大孰小;给定数值的方法:脚本参数,命令交互;(使用read,依然如此简单)
#!/bin/bash #首行固定格式 #第6题 判断给定两个数的大小 read -p "请输入两个数:" -t 100 nu1 nu2 if [ $nu1 -gt $nu2 ];then echo "$nu1 大于 $nu2" elif [ $nu1 -lt $nu2 ];then echo "$nu1 小于 $nu2" elif [ $nu1 -eq $nu2 ];then echo "$nu1 等于 $nu2" else echo " " fi
7、求100以内所有奇数之和(至少用3种方法。是的这是我们的作业^_^)
#!/bin/bash #首行固定格式 #第7题 求100以内奇数和 let sum=0 for i in $(seq 1 2 100);do let sum=$[$sum+$i] done echo $sum
#!/bin/bash #首行固定格式 #第7题 求100以内奇数和 let sum=0 for ((i=1; i<=100;i++));do if [ $[$i%2] -eq 1 ];then let sum=$[$sum+$i] fi done echo $sum
#!/bin/bash #首行固定格式 #第7题 求100以内奇数和 declare -i sum=0 declare -i i=1 while [ $i -le 100 ];do if [ $[$i%2] -ne 0 ];then let sum+=$i fi let i++ done echo $sum
8、写一个脚本实现如下功能:
(1) 传递两个文本文件路径给脚本;
(2) 显示两个文件中空白行数较多的文件及其空白行的个数;
(3) 显示两个文件中总行数较多的文件及其总行数;
#!/bin/bash #首行固定格式 #第8题,比较并统计所传递两个文件的空白行 if [ $# -lt 2 ];then echo "two" exit 1 fi if [ $(grep "^$" $1 | wc -l) -gt $(grep "^$" $2 | wc -l) ];then echo "more blank line file is $1" && echo "there are $(grep "^$" $1 | wc -l) blank lines" else echo "more blank line file is $2" && echo "there are $(grep "^$" $2 | wc -l) blank lines" fi if [ $(wc -l $1 | cut -d" " -f1) -gt $(wc -l $2 | cut -d" " -f1) ];then echo "more line is $1" && echo "File number: $(wc -l $1)" else echo "more line is $2" && echo "File number: $(wc -l $2)" fi
9、写一个脚本
(1) 提示用户输入一个字符串;
(2) 判断:
如果输入的是quit,则退出脚本;
否则,则显示其输入的字符串内容;
#!/bin/bash #首行固定格式 #第9题,提示输入一个单词,然后比较 read -p "请你输入一个单词:" -t 100 word if [ "$word" == ‘quit‘ ];then echo "你输入的是$word ,byebye !" exit 10 else echo "你输入的单词 $word 不是我想要的" fi
10、写一个脚本,打印2^n表;n等于一个用户输入的值;(不好意思,我调皮了)
#!/bin/bash #首行固定格式 #第10题,打印2的n次方表 read -p "请你输入一个次方数" -t 100 num let sum=1 for ((i=1; i <= "$num";i++));do let sum=$[$sum*2] done echo "2^$num = $sum"
11、写一个脚本,写这么几个函数:函数1、实现给定的两个数值的之和;函数2、取给定两个数值的最大公约数;函数3、取给定两个数值的最小公倍数;关于函数的选定、两个数值的大小都将通过交互式输入来提供。
#!/bin/bash #首行固定格式 #第11题 read -p "请输入sum/gcd/lcm: " -t 100 mode read -p "请输入两个数:" -t 1000 nu1 nu2 let sumnum=0 function sum(){ let sumnum=$[$nu1+$nu2] echo "$nu1 + $nu2 的和是$sumnum" } let gcdnum=0 function gcd(){ c=$[$nu1%$nu2] while [ "$c" -ne 0 ];do let gcdnum=$c nu1=$nu2 nu2=$c c=$[$nu1%$nu2] done echo $gcdnum } let lcmnum=0 function lcm(){ c=$[$nu1%$nu2] pro=$[$nu1*$nu2] while [ "$c" -ne 0 ];do tmp=$c nu1=$nu2 nu2=$c c=$((nu1%nu2)) done let lcmnum=$[$pro/$tmp] echo "$lcmnum" } if [ "$mode" == "sum" ];then sum $nu1 $nu2 elif [ "$mode" == "gcd" ];then gcd $nu1 $nu2 elif [ "$mode" == "lcm" ];then lcm $nu1 $nu2 else echo "你的输入有误!" fi
原文地址:http://pizimsn.blog.51cto.com/7002551/1698050