linux l7,L7 linux shell编程练习

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

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

3、总结课程所讲的所有循环语句、条件判断的使用方法及其相关示例;

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

#

if [ $# -ne 1 ]

then

echo "Usage:$0 directory"

exit 1

fi

if [ -d $1 ]

then

echo "$1 is exist"

file $1

else

mkdir -p $1 &>/dev/null

if [ $? -ne 0 ]

then

echo "mkdir error"

exit 2

fi

fi

#执行结果

[root@os01 /]# ./mkdir.sh test1

[root@os01 /]# ll -d test1/

drwxr-xr-x 2 root root 6 Sep 17 13:47 test1/

[root@os01 /]# ./mkdir.sh test1

test1 is exist

test1: directory

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

#

read -p "plz input to num:" -t 10 num1 num2

if [ -z "$num1" -o  -z "$num2" ];

then

echo "Plz give two integers."

exit 1

fi

if [ $num1 -gt $num2 ]

then

echo "Max:$num1 , Min:$num2"

elif [ $num1 -lt $num2 ]

then

echo "Max:$num2 , Min:$num1"

else

echo "$num1 equal $num2"

fi

#执行结果

[root@os01 /]# ./read.sh

plz input to num:

Plz give two integers.

[root@os01 /]# ./read.sh

plz input to num:9 5

Max:9 , Min:5

[root@os01 /]# ./read.sh

plz input to num:9 9

9 equal 9

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

第一种:for#!/bin/bash

declare -i num=0

for i in `seq 1 2 100`

do

num+=i

#  num=$[$num+$i]

done

echo "sum is $num"

执行结果:

[root@os01 /]# ./1.sh

sum is 2500

第二种:while#!/bin/bash

#

declare -i i=1

declare -i sum=0

while [ $i -le 100 ]

do

sum+=i

let i+=2

done

echo "sum is $sum"

#执行结果

[root@os01 /]# ./2.sh

sum is 2500

第三种:for contniue#!/bin/bash

declare -i i=1

declare -i sum=0

for i in `seq 1 100`

do

if [ $[$i%2] -eq 0 ]

then

continue

fi

sum+=i

done

echo "sum is $sum"

#执行结果

[root@os01 /]# ./3.sh

sum is 2500

第四种:until#!/bin/bash

#

declare -i i=0

declare -i sum=0

until [ $i -eq 100 ]

do

let i++

if [ $[$i%2] -eq 0 ]

then

continue

fi

sum+=i

done

echo "sum is $sum"

[root@os01 /]# ./4.sh

sum is 2500

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

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

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

(3) 显示两个文件中总行数较多的文件及其总行数;#!/bin/bash

#

read -p "plz input two file or dir path:" -t 50 f1 f2

if [ -z $f1 -o -z $f2 ]

then

echo "Usg:$0 /path/file1 /path/file2"

exit 1

fi

if [ ! -e $f1 -o ! -e $f2 ]

then

echo "$f1 or $f2 not exist"

exit 2

fi

f1_s=`grep '^$' $f1|wc -l`

f2_s=`grep '^$' $f2|wc -l`

if [ $f1_s -gt $f2_s ]

then

echo "space_max: $f1 : $f1_s;"

elif [ $f1_s -lt $f2_s ]

then

echo "space_max: $f2 : $f2_s;"

else

echo "$f1,$f2 space lines is eq;space_line= $f1_s"

fi

f1_lines=`wc -l $f1|cut -d" " -f1`

f2_lines=`wc -l $f2|cut -d" " -f1`

if [ $f1_lines -gt $f2_lines ]

then

echo "max_lines: $f1 :$f1_lines ;"

elif [ $f1_lines -lt $f2_lines ]

then

echo "max_lines: $f2 : $f2_lines ;"

else

echo "$f1,$f2  lines is eq"

echo "$f1 lines: $f1_lines , space_lines: $f1_s"

echo "$f2 lines: $f2_lines , space_lines: $f2_s"

fi

#执行结果

[root@os01 dir]# ./6.sh

plz input two file or dir path:

Usg:./6.sh /path/file1 /path/file2

[root@os01 dir]# ./6.sh

plz input two file or dir path:a.txt b.txt

a.txt,b.txt space lines is eq;space_line= 3

max_lines: b.txt : 9 ;

8、写一个脚本

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

(2) 判断:

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

否则,则显示其输入的字符串内容;#!/bin/bash

read -p "plz input one char:" -t 20 char

if [ -z $char ]

then

echo "Usg: $0 Character"

exit 1

fi

case $char in

quit)

exit 0

;;

*)

echo "$char"

esac

#执行结果

[root@os01 dir]# ./4.sh

plz input one char:Usg: ./4.sh Character  #超时未输入退出

[root@os01 dir]# ./4.sh

plz input one char:quit           #退出脚本

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

两个结果不知道要求哪个。#!/bin/bash

read  -p "plz input a num:" -t 10 num

if [ -z $num ]

then

exit 1

fi

echo "2^0=1"

echo "2^1=2"

for i in `seq 2 $num`

do

a+=x2

echo "2$a=$[2**$i]"

done

#执行结果

[root@os01 dir]# ./mi.sh

plz input a num:10

2^0=1

2^1=2

2x2=4

2x2x2=8

2x2x2x2=16

2x2x2x2x2=32

2x2x2x2x2x2=64

2x2x2x2x2x2x2=128

2x2x2x2x2x2x2x2=256

2x2x2x2x2x2x2x2x2=512

2x2x2x2x2x2x2x2x2x2=1024

第二个:#!/bin/bash

read  -p "plz input a num:" -t 10 num

if [ -z $num ]

then

exit 1

fi

for i in `seq 0 $num`

do

echo "2^$i=$[2**$i]"

done

#执行结果:

[root@os01 dir]# ./test.sh

plz input a num:6

2^0=1

2^1=2

2^2=4

2^3=8

2^4=16

2^5=32

2^6=64

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

函数脚本:/shell/hs.sh 执行脚本:/shell/cal.sh

函数脚本:

取最大公约数思路:两个数值从1到较小数字都必须同时取余数为0,依次取出公约数覆盖输出到文件,最后一个为最大公约数。

取最小公倍数思路:从1到两个数字乘积循环取余数,较大数依次与循环变量相乘再对较小数字取余,当余为0时,为最小公倍数。

两个数字乘积肯定是公约数,所以从1到两个数乘积循环,从大的数字X1,X2,X3一直到两个数字乘积,第一个能对小的数字取余数为0(跳出break)的为最小公倍数。#!/bin/bash

#错误函数======================================================

error() {

if [ -z $m -o -z $n ]

then

echo  "请输入两个数值"

exit 1

fi

}

#计算两个整数之和================================================

zh() {

read -p "请输入两个整数,计算它们的和:" -t 10 m n

error

zonghe=$[$m+$n]

echo $zonghe

}

#计算最大公约束====================================================

zdgys() {

read -p "请输入两个整数,计算它们的最大公约数:" -t 10 m n

error

if [ $m -gt $n ]

then

for i in `seq 1 $n`

do

if [ $[$n%$i] -eq 0 -a $[$m%$i] -eq 0 ]

then

echo $i>/tmp/max1.txt

fi

done

cat /tmp/max1.txt

elif [ $m -le $n ]

then

for i in `seq 1 $n`

do

if [ $[$n%$i] -eq 0 -a $[$m%$i] -eq 0 ]

then

echo $i>/tmp/max2.txt

fi

done

cat /tmp/max2.txt

fi

}

#计算最小公倍数=====================================================

zxgbs() {

read -p "请输入两个数字,计算它们的最小公倍数:" -t 10 m n

error

if [ $m -gt $n ]

then

for j in `seq 1 $[$m*$n]`

do

if [ $[$m*$j%$n] -eq 0 ]

then

echo "$[$m*$j]"

break

fi

done

elif [ $m -le $n ]

then

for j in `seq 1 $[$m*$n]`

do

if [ $[$n*$j%$m] -eq 0 ]

then

echo "$[$n*$j]"

break

fi

done

fi

}

执行脚本:/shell/cal.sh#!/bin/bash

read -p "plz input 'zh'|'zdgys'|'zxgbs':" -t 20 char

. /shell/hs.sh

case $char in

zh)

zh

;;

zdgys)

zdgys

;;

zxgbs)

zxgbs

;;

*)

echo "input error:Usg:'zh'|'zdgys'|'zxgbs'"

esac

#执行结果:

[root@os01 ~]# ./cal.sh

plz input 'zh'|'zdgys'|'zxgbs':zh

请输入两个整数,计算它们的和:10 90

100

[root@os01 ~]# ./cal.sh

plz input 'zh'|'zdgys'|'zxgbs':zdgys

请输入两个整数,计算它们的最大公约数:10 90

10

[root@os01 ~]# ./cal.sh

plz input 'zh'|'zdgys'|'zxgbs':zxgbs

请输入两个数字,计算它们的最小公倍数:10 90

90

[root@os01 ~]# ./cal.sh

plz input 'zh'|'zdgys'|'zxgbs':as^H

input error:Usg:'zh'|'zdgys'|'zxgbs'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值