linux学习之shell练习


1、描述shell程序的运行原理(可附带必要的图形说明);

2、总结shell编程中所涉及到的所有知识点(如:变量、语法、命令状态等等等,要带图的哟);

    总结文章:

3、总结课程所讲的所有循环语句、条件判断的使用方法及其相关示例;(if (jpg|png is not exist);echo ”You say a XX“)

    总结文章:

4、总结文本处理工具sed及awk的用法;(必须附带示例)

   总结文章:

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 $dirnamefi[root@pizi ~]#

6、写一个脚本,完成如下功能;判断给定的两个数值,孰大孰小;给定数值的方法:脚本参数,命令交互;(使用read,依然如此简单)

#!/bin/bash#首行固定格式#第6题 判断给定两个数的大小read -p "请输入两个数:" -t 100 nu1 nu2if [ $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=0for i in $(seq 1 2 100);do   let sum=$[$sum+$i]doneecho $sum
#!/bin/bash#首行固定格式#第7题 求100以内奇数和let sum=0for ((i=1; i<=100;i++));do   if [ $[$i%2] -eq 1 ];then     let sum=$[$sum+$i]   fidoneecho $sum
#!/bin/bash#首行固定格式#第7题 求100以内奇数和declare -i sum=0declare -i i=1while [ $i -le 100 ];do        if [ $[$i%2] -ne 0 ];then        let sum+=$i        fi        let i++doneecho $sum

8、写一个脚本实现如下功能:

(1) 传递两个文本文件路径给脚本;

(2) 显示两个文件中空白行数较多的文件及其空白行的个数;

(3) 显示两个文件中总行数较多的文件及其总行数;

#!/bin/bash#首行固定格式#第8题,比较并统计所传递两个文件的空白行if [ $# -lt 2 ];then        echo "two"        exit 1fiif [ $(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"fiif [ $(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 wordif [ "$word" == 'quit' ];then   echo "你输入的是$word ,byebye !"   exit 10else   echo "你输入的单词 $word 不是我想要的"fi

10、写一个脚本,打印2^n表;n等于一个用户输入的值;(不好意思,我调皮了)

#!/bin/bash#首行固定格式#第10题,打印2的n次方表read -p "请你输入一个次方数" -t 100 numlet sum=1for ((i=1; i <= "$num";i++));do    let sum=$[$sum*2]doneecho "2^$num = $sum"

11、写一个脚本,写这么几个函数:函数1、实现给定的两个数值的之和;函数2、取给定两个数值的最大公约数;函数3、取给定两个数值的最小公倍数;关于函数的选定、两个数值的大小都将通过交互式输入来提供。

#!/bin/bash#首行固定格式#第11题read -p "请输入sum/gcd/lcm: " -t 100 moderead -p "请输入两个数:" -t 1000 nu1 nu2let sumnum=0function sum(){  let sumnum=$[$nu1+$nu2]  echo "$nu1 + $nu2 的和是$sumnum"}let gcdnum=0function gcd(){ c=$[$nu1%$nu2] while [ "$c" -ne 0 ];do  let gcdnum=$c  nu1=$nu2  nu2=$c  c=$[$nu1%$nu2] doneecho $gcdnum}let lcmnum=0function 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 $nu2elif [ "$mode" == "gcd" ];then    gcd $nu1 $nu2elif [ "$mode" == "lcm" ];then   lcm $nu1 $nu2else  echo "你的输入有误!"fi