学习shell script

如果你的想要管理好你的主机,那么就要好好学习自动管理系统的有效工具——hell script!基本上,shell script有点像早期的批处理文件,即将很多命令整合起来一次执行,但是shell script拥有更强大的功能,它可以进行类似程序的编写,并且不需要经过编译就能够执行,非常方便我们对系统进行管理。

今天我们主要通过对一些shell script的习题来加深对脚本知识的学习。

习题1:对成绩进行判断,要求输入一个正整数,以60分,85分为界输出不同的评语。

#!/bin/bash

#
-------------------------------------------------

# Filename:score.sh

# Revision:1.0

# Date: 2017-09-14

# Author:liumengjiao

#
Email:[email protected]

#
Website:http://liumengjiao.blog.51cto.com/

# Description:score evaluation

#
-------------------------------------------------

read -p "Please
input your score: " score

if [[ $score =~
[^0-9] ]] ;then

echo "please input a positive integer"

exit 10

elif [ $score -gt
100 ];then

echo "Your score is wrong"

exit 20

elif [ $score -ge 85
];then

echo "Your score is very
good"

elif [ $score -ge 60
];then

echo "Your score is soso"

else

echo "You have to work hard"

fi

执行测试:

解析:第一行#!/bin/bash声明这个script使用的shell,整个script当中,除了第一行的“#!”是用来声明shell的之外,其他的#都是用来注释的。所以在上面的程序当中,第一行以下的就是用来说明整个程序的基本程序。一般来说,建议一定要养成说明该脚本的内容与功能、版本信息、作者与联系方式、建立日期等习惯。这有助于将来程序的修改和调试。程序部分:主要用到了条件判断if语句。根据不同的分数输出不同的评价。

习题2 : 编写脚本/root/bin/yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或其它信息

[[email protected] bin]#
vim yueorno10.sh

# -------------------------------------------------

# Filename:yesorno10.sh

# Revision:1.0

# Date: 2017-09-14

# Author:liumengjiao

# Email:[email protected]

# Website:http://liumengjiao.blog.51cto.com/

# Description:score evaluation

# -------------------------------------------------

read -p "Yue ma?yes or no: " ans

ans=`echo $ans|tr
"A-Z" "a-z"`

case $ans in

yes|y)

echo "yue"

;;

no|n)

echo "no yue"

;;

*)

echo "answer error!"

;;

esac

解析:这一题用到了case...esac判断。它的格式如下

case  $变量名称 in

PAT1)

分支1

;;

PAT2)

分支2

;;

...

*)

默认分支

;;

esac

执行测试:

执行程序,你可以输入yes、y、no、n的各种大小写组合,如果输入yes或者y,就在屏幕上打印“yue”,如果输入no或者n,就在屏幕上打印“no yue”,输入其它则打印“answer error!”。使用这样的方式对于某些固定字符串来执行的变量内容就显得更加方便。系统的很多启动脚本就是这种写法的。

case支持glob风格的通配符:

*: 任意长度任意字符

?: 任意单个字符

[]:指定范围内的任意单个字符

a|b: a或b

习题3:8行6列随机颜色闪烁*

for i in {1..8};do

for j in {1..6};do

color=$[RANDOM%7+31]

echo -e  "\033[1;${color};5m*\033[0m\c"  #打印随机闪烁*

done

echo

done

解析:这个程序用到了for循环。格式如下:

for 变量名 in 列表;do

循环体

done

执行机制:依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束

这个程序的意思是打印8行,每行打印6个随机颜色的*,其中,i控制行,j控制列。

习题4:编写脚本,实现打印国际象棋棋盘

#!/bin/bash

# -------------------------------------------------

# Filename:chess10.sh

# Revision:1.0

# Date: 2017-09-11

# Author:liumengjiao

# Email:[email protected]

# Website:http://liumengjiao.blog.51cto.com/

# Description:

# -------------------------------------------------

color1=‘\033[46m    \033[0m‘ #天蓝色

color2=‘\033[47m    \033[0m‘ # 白色

for i in {1..8};do

for k in {1..2};do

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

for j in {1..4};do

echo -en "$color1$color2"

done

else

for j in {1..4};do

echo -en "$color2$color1"

done

fi

echo

done

done

解析:这道题将for循环和if条件判断结合在一起,奇数行开头打印白色,偶数行开头打印天蓝色,从而实现不同方块颜色的交叉显示。

习题5:斐波那契数列又称黄金分割数列,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2)。请输入n值,打印斐波那契数列

方法1:利用迭代的方法得出前n个斐波那契数列

#!/bin/bash

#
-------------------------------------------------

# Filename:fibo.sh

# Revision:1.0

# Date: 2017-09-14

# Author:liumengjiao

#
Email:[email protected]

# Website:http://liumengjiao.blog.51cto.com/

# Description:

#
-------------------------------------------------

read -p "请输入n值:" num

i=0

while [ $i -le $num
]  ;do

if [ $i -eq 0 ];then

num1=0

echo $num1

elif [ $i -eq 1 ];then

num2=1

echo $num2

else

tmp=$num2

let num2=num1+num2

num1=$tmp

echo $num2

#let num2=num1+num2

#echo $num2

fi

let i++

done

方法2:利用递归的方法得出第n个斐波那契数

#!/bin/bash

# -------------------------------------------------

# Filename:Fibonacci

# Revision:1.0

# Date: 2017-09-14

# Author:liumengjiao

# Email:[email protected]

# Website:http://blog.csdn.net/ruoshuiss/

# Description:

# -------------------------------------------------

fibo() {

if [ $1 -eq 0 ];then

echo 0

elif [ $1 -eq 1 ];then

echo 1

else

echo $[$(fibo $[$1-1])+$(fibo $[$1-2])]

fi

}

fibo $1

解析:这道题不仔细看就会只想到用递归算法解决,但是,用递归的方法太浪费资源,运行速度慢,其实可以利用迭代的方法,从头开始,不断交换数值,一步步得出下一个数。在方法2中,用到了函数的功能。

函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程,它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部分,函数和shell程序比较相似,区别在于:Shell程序在子Shell中运行,而Shell函数在当前Shell中运行。因此在当前Shell中,函数可以对shell中变量进行修改

习题6:汉诺塔(又称河内塔)问题是源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘,利用函数,实现N片盘的汉诺塔的移动步骤。

#!/bin/bash

# -------------------------------------------------

# Filename:hanoi10.sh

# Revision:1.0

# Date: 2017-09-14

# Author:liumengjiao

# Email:[email protected]

# Website:http://liumengjiao.blog.51cto.com/

# Description:

# -------------------------------------------------

echo "将圆盘借助C从A移到B"

read -p "输入黄金圆盘数:" n

move(){

echo "move $1 from $2 ======> $3"

}

hanoi(){

if [ $1 -eq 1 ];then

move $1 $2 $3

else

hanoi $[$1-1] $2 $4 $3

move $1 $2 $3

hanoi $[$1-1] $4 $3 $2

fi

}

hanoi $n A

解析:将n-1个盘子看做一个整体移动,然后将最后一个盘子移到B,通过递归移动剩下的n-1个盘子。

时间: 2024-09-27 01:03:06

学习shell script的相关文章

bash shell学习-shell script基础 (笔记)

A chain no stronger than its weakest link. "一着不慎,满盘皆输" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版)  Linux Shell脚本攻略     Linux程序设计(第四版) 一.什么是shell script 1.什么是shell script 简单来说,shell script(程序化脚本)是利用shell功能所写的一个“程序”,它拥有自己的语法特性 2.为什么要学shell script 对于一个初学者来说,我觉得就那

菜鸟的《Linux程序设计》学习—shell script

1. 认识shell script shell script是利用shell的功能缩写的一个"程序",这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式,管道命令与数据流重定向等功能,以达到我们想要的处理目的. shell script有很广泛的应用: (1)自动化管理的重要依据 (2)追踪与管理系统的重要工作 (3)简单入侵检测功能 (4)连续命令单一化 (5)简易的数据处理 (6)支持跨平台 所以说,shell script用在系统管理上面

第13章 学习shell script

第一个script [[email protected] script]# cat -n sh01.sh 1 #!/bin/bash 2 #Program: 3 #This program shows "Hello World!" in your screen. 4 PATH=/usr/local/java/jdk1.8.0_91/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin:~/b

鸟哥的Linux私房菜之学习shell script

运行程序的时候一般都是创建一个子程序来执行,所以子程序中的变量什么的在当前的shell下没法使用,但是如果使用source来执行就可以在当前shell下执行程序

第十三章、学习 Shell Scripts 简单的 shell script 练习

简单的 shell script 练习 简单范例 对谈式脚本:变量内容由使用者决定 [[email protected] scripts]# vi sh02.sh #!/bin/bash # Program: # User inputs his first name and last name. Program shows his full name. # History: # 2005/08/23 VBird First release PATH=/bin:/sbin:/usr/bin:/us

Shell Script 学习 I

Shell Script I Shell有两种执行命令的方式: 交互式(Interactive):解释执行用户的命令,用户输入一条命令,Shell就解释执行一条. 批处理(Batch):用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令 Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把它们称作一种Shell ,bash是Linux标准默认的shell, sh 是Unix 标准默认的s

Unix/Linux shell脚本编程学习--Shell Script II

Shell Script II 10.Shell echo命令 echo "OK!\n”   #显示换行 echo "It is a test" echo无拼接字符时后一般可以不使用”引号”,从上面可看出,双引号可有可无,单引号主要用在原样输出中. 显示结果重定向保存至文件: vim myfile 创建文件 echo "It is a test" > myfile cat myfile 查看文件内容 若需要原样输出字符串(不进行转义),请使用单引号.

第十三章、学习 Shell Scripts

1. 什么是 Shell Script 1.1 干嘛学习 shell scripts 1.2 第一支 script 的撰写与运行 1.3 撰写 shell script 的良好习惯创建 2. 简单的 shell script 练习 2.1 简单范例: 对谈式脚本, 随日期变化, 数值运算 2.2 script 的运行方式差异 (source, sh script, ./script) 3. 善用判断式 3.1 利用 test 命令的测试功能 3.2 利用判断符号 [ ] 3.3 Shell sc

跟鸟哥学Linux之——shell script

从程序员的角度来看,Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作.在系统管理等领域,Shell编程起着不可忽视的作用.前期我对shell编程做了一个初步的认识,现总结如下: 思维导图: 知识分为了两部分: 基本知识: 在基本知识中我将其分为了:执行方法.运算式.变量和判断式四部分.1.执行方法就是在Linux中shell文件执行的命令,用的多了自然会没有问题.2