一、作业(练习)内容:
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
如有错误,敬请指正!
谢谢!