码迷,mamicode.com
首页 > 系统相关 > 详细

linux学习之shell练习

时间:2015-09-25 03:55:52      阅读:355      评论:0      收藏:0      [点我收藏+]

标签:linux   shell 公约数 公倍数   


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


技术分享


linux学习之shell练习

标签:linux   shell 公约数 公倍数   

原文地址:http://pizimsn.blog.51cto.com/7002551/1698050

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!