linux运维实战练习-2015年9月13日-9月15日课程作业

时间:2021-08-07 01:35:09


一、作业(练习)内容:

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

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

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

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

5、写一个脚本:如果某路径不存在,则将其创建为目录;否则显示其存在,并显示内容类型;(不要怀疑,就是这么简单)

#/bin/bash#Program:
#    一个脚本:如果某路径不存在,则将其创建为目录;否则显示其存在,并显示内容类型
#    roger    20150920

read -p "请输入一个路径:" dir
[ -z "$dir" ] && echo "必须要输入一个路径" && exit 0
if (ls "$dir" &> /dev/null ); then
    fileType=$(file "$dir")
    echo "$dir 路径存在其文件内容类型为:$fileType"
else
    mkdir -p $dir
    echo "$dir 路径不存在,创建目录 $dir"
fi

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

#/bin/bash#Progrom:#    判断给定的两个数值,孰大孰小;给定数值的方法:脚本参数# roger 20150920[ -z $1 ] && [ -z $2 ]&& echo "请输入两个整数 > {CompareNum.sh num1 num2 }" && exit 0#判断输入的是不是整数num1=$(echo $1 | grep '^[0-9]\+$')num2=$(echo $2 | grep '^[0-9]\+$')[ -z $num1 ] && echo "$1 输入的不是整数" && exit 0[ -z $num2 ] && echo "$2 输入的不是整数" && exit 0#比较两个数大小[ $1 -lt $2 ] && echo "$1 < $2 " && exit 0[ $1 -gt $2 ] && echo "$1 > $2 " && exit 0[ $1 -eq $2 ] && echo "$1 = $2 " && exit 0
#/bin/bash#Progrom#    判断给定的两个数值,孰大孰小;给定数值的方法:交互输入# roger 20150920#输入两个整数read -p "请输入两个整数:" num1 num2[ -z $num1 ] && [ -z $num2 ]&& echo "必须输入两个整数!! " && exit 0#判断输入的是不是整数testnum1=$(echo $num1 | grep '^[0-9]\+$')testnum2=$(echo $num2 | grep '^[0-9]\+$')[ -z $testnum1 ] && echo "$num1 输入的不是整数" && exit 0[ -z $testnum2 ] && echo "$num2 输入的不是整数" && exit 0#比较两个数大小[ $num1 -lt $num2 ] && echo "$num1 < $num2 " && exit 0[ $num1 -gt $num2 ] && echo "$num1 > $num2 " && exit 0[ $num1 -eq $num2 ] && echo "$num1 = $num2 " && exit 0

7、求100以内所有奇数之和(至少用3种方法。是的这是我们的作业^_^)

#!/bin/bash# Program:#    100以内所有奇数的和 三种方法# roger 20150920PATH=/bin:/sbin/:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport     PATHecho "计算方法选择"echo "1 使用i=1 i+=2奇数增长计算;for循环"echo "2 使用i%2!=0判断奇数;for循环"echo "3 使用while循环判断计算"read -p  "请选择使用哪种方法计算(ex. 1):" methodsum=0i=1case $method in  "1")    for i in $(seq 1 2 100)    do        sum=$[$sum + $i]    done    ;;  "2")    for i in {1..100}    do      if [ $(($i%2)) != "0" ]; then        sum=$[$sum + $i]      fi    done    ;;  "3")    while [ "$i" -le "100" ]    do      sum=$[$sum + $i]      i=$(($i+2))    done    ;;   *)    echo "您的输入有误!请选择输入1 / 2 / 3"    exit 0;esac#输出结果echo "1+3+5+...+97+99求和 sum= $sum"


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

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

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

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

#!/bin/bash# Program:#   写一个脚本实现如下功能:#    (1) 传递两个文本文件路径给脚本;#    (2) 显示两个文件中空白行数较多的文件及其空白行的个数;#    (3) 显示两个文件中总行数较多的文件及其总行数;PATH=/bin:/sbin/:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport     PATH#提示输入read -p "请输入两个文本文件路径" txtPath1 txtPath2#输入check[ ! -f $txtPath1 ] && echo "您输入的文件不是文本文件" && exit 0[ ! -f $txtPath2 ] && echo "您输入的文件不是文本文件" && exit 0#显示两个文件中空白行数较多的文件及其空白行的个数;##空白行数spLines1=$( grep '^$' $txtPath1 | wc -l )spLines2=$( grep '^$' $txtPath2 | wc -l )##比较空白行数if [ $spLines1 -lt $spLines2 ]; then    echo -e "空白行较多的文本文件是: $txtPath2 \n空白行数是: $spLines2 "elif [ $spLines1 -gt $spLines2 ]; then    echo -e "空白行较多的文本文件是: $txtPath1 \n空白行数是: $spLines1 "else     echo -e " $txtPath1 和 $txtPath2 空白行数相等,空白行数是: $spLines1 "fi#显示两个文件中总行数较多的文件及其总行数;##总行数sumLines1=$( wc -l $txtPath1 | cut -d ' ' -f1 )sumLines2=$( wc -l $txtPath2 | cut -d ' ' -f1 )##比较总行数if [ "$sumLines1" -lt "$sumLines2" ]; then    echo -e "总行较多的文本文件是: $txtPath2 \n总行数是: $sumLines2 "elif [ "$sumLines1" -gt "$sumLines2" ]; then    echo -e "总行较多的文本文件是: $txtPath1 \n总行数是: $sumLines1 "else     echo -e " $txtPath1 和 $txtPath2 总行数相等,总行数是: $sumLines1 "fi


9、写一个脚本

(1) 提示用户输入一个字符串;

(2) 判断:

如果输入的是quit,则退出脚本;

否则,则显示其输入的字符串内容;

#!/bin/bash# Program:#    写一个脚本#    (1) 提示用户输入一个字符串;#    (2) 判断:#    如果输入的是quit,则退出脚本;#    否则,则显示其输入的字符串内容;## roger 20150920PATH=/bin:/sbin/:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport     PATHread -p "请输入一个字符串:" str[ -z $str ] && echo "您输入的是空字符串" && exit 0if [ $str = "quit" ]; then    exit 0else    echo "您输入的内容是:"$str" "fi


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

#!/bin/bash# Program:#    打印2^n表;n等于一个用户输入的值;## roger 20150920PATH=/bin:/sbin/:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport     PATHread -p "请输入一个整数:" nnum=$( echo $n | grep '^[0-9]\+$')[ -z $num ] && echo "您输入的不是整数" && exit 0i=0while [ $i -le $n ]do  echo "2^$i=$((2**$i))"  let i++done


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

#!/bin/bash# Program:#    写一个脚本,写这么几个函数:#        函数1、实现给定的两个数值的之和;#        函数2、取给定两个数值的最大公约数;#        函数3、取给定两个数值的最小公倍数;#        关于函数的选定、两个数值的大小都将通过交互式输入来提供。# roger 20150920PATH=/bin:/sbin/:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport     PATHecho "选择使用的功能:"echo "1 实现给定的两个数值之和"echo "2 取给定两个数值的最大公约数"echo "3 取给定两个数值的最小公倍数"#因为read 是后面加上的,所以在判断传入参数是使用$1 $2出现问题,修改完后没有测试,所以出现错误#read -p  "请输入两个整数: " num1 num2####判断输入是不是空###[ -z $1 ] && [ -z $2 ]&& echo "必须输入两个整数" && exit 0####判断输入的是不是整数##num1=$(echo $1 | grep '^[0-9]\+$')##num2=$(echo $2 | grep '^[0-9]\+$')##[ -z $num1 ] && echo "$1 输入的不是整数" && exit 0##[ -z $num2 ] && echo "$2 输入的不是整数" && exit 0#正确的代码:read -p  "请输入两个整数: " n1 n2#判断输入是不是空[ -z $n1 ] && [ -z $n2 ]&& echo "必须输入两个整数" && exit 0#判断输入的是不是整数num1=$(echo $n1 | grep '^[0-9]\+$')num2=$(echo $n2 | grep '^[0-9]\+$')[ -z $num1 ] && echo "$n1 输入的不是整数" && exit 0[ -z $num2 ] && echo "$n2 输入的不是整数" && exit 0read -p  "请选择使用哪种方法计算(ex. 1):" methoddeclare -i resultSum=0 #两整数之和declare -i resultGcd=0 #最大公约数declare -i resultLcm=0 #最小公倍数#求和function sum() {    resultSum=$(($1+$2))}#最大公约数function gcd() {    a=$1    b=$2    if [ $1 -lt $2 ]; then        c=$a        a=$b        b=$c    fi    while [ "$b" != 0 ]    do        c=$[ $a%$b ]        a=$b        b=$c    done    resultGcd=$a}#最小公倍数function lcm(){    lcma=$[ $1*$2 ]    gcd $1 $2    lcmb=$resultGcd     resultLcm=$[ $lcma/$lcmb ]}case $method in    "1")         sum $num1 $num2        echo "结果是:$num1 + $num2 = $resultSum"        ;;    "2")        gcd $num1 $num2        echo "$num1"和"$num2"的最大公约数是:"$resultGcd"        ;;    "3")        lcm $num1 $num2        echo "$num1"和"$num2"的最小公倍数是:"$resultLcm"        ;;     *)        echo "您输入带有错误,请输入 1 或 2 或 3 "        exit 0esac



如有错误,敬请指正!

谢谢!