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


一、作业(练习)内容:

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 20150920

PATH=/bin:/sbin/:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export     PATH

echo "计算方法选择"
echo "1 使用i=1 i+=2奇数增长计算;for循环"
echo "2 使用i%2!=0判断奇数;for循环"
echo "3 使用while循环判断计算"

read -p  "请选择使用哪种方法计算(ex. 1):" method

sum=0
i=1

case $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:~/bin
export     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 20150920

PATH=/bin:/sbin/:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export     PATH

read -p "请输入一个字符串:" str

[ -z $str ] && echo "您输入的是空字符串" && exit 0

if [ $str = "quit" ]; then
    exit 0
else
    echo "您输入的内容是:"$str" "
fi


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

#!/bin/bash
# Program:
#    打印2^n表;n等于一个用户输入的值;
#
# roger 20150920

PATH=/bin:/sbin/:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export     PATH

read -p "请输入一个整数:" n

num=$( echo $n | grep '^[0-9]\+$')

[ -z $num ] && echo "您输入的不是整数" && exit 0

i=0
while [ $i -le $n ]
do
  echo "2^$i=$((2**$i))"
  let i++
done


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

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

PATH=/bin:/sbin/:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export     PATH

echo "选择使用的功能:"
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 0

read -p  "请选择使用哪种方法计算(ex. 1):" method


declare -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 0
esac



如有错误,敬请指正!

谢谢!

你可能感兴趣的:(linux,知识点)