shell脚本进阶—课堂总结

循环、函数、会持续更新

194d0239284faf60ed120038aacfa7d8

一般过程式编程语言都分为三种:

1.顺序执行

2.选择执行

3.循环执行

接下来我们介绍下 顺序执行和选择执行的的语句的格式和简单的例子

if    语句

格式:

if    判断条件   ;    then

当条件为真时要执行的分支代码

elif

条件为真且不满足第一条判断条件时,分支执行的代码

else

条件为假时要执行的分支代码

fi

例子QQ图片20180510193546

基本的格式如上,但有时判断条件少的时候也可不要else 和它的执行代码。判断条件比较简单时也可以不要elif和它的执行代码,更多情况下else更像时一个兜底的命令,负责结尾的提示。

注意:判断条件也可以为命令,命令结果为真执行后面的分支代码

case语句

格式:

case    变量引用     in

pat1)

判断pat1与变量匹配成功后要执行的分支代码

;;

pat2)

判断pat2与变量匹配成功后要执行的分支代码

;;

*)

之上条件都不匹配后要执行的兜底代码

;;

esac

例子:

QQ图片20180510195410

注意:case语句可以支持通配符,可以用来判断之前的yes no 的问题

平常常用的通配符:

*   表示任意长度的任意字符

? 任意单个字符

[ ]  匹配范围内任意单个字符

a|b  表示a或b

循环执行:

1.将某代码段重复运行多次

2.重复运行多少次
循环次数事先已知
循环次数事先未知

3.有进入条件和退出条件

我们常用的循环语句有for、while、until等语句,下面就详细介绍下他们的用法和格式。

for 语句

for   变量名    in    列表  ;   do
循环体
done

语句执行的机制:

依次将列表中的元素赋值给“变量名”;

每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束

例子:

QQ图片20180510200724

列表生成方式:

1.直接给出列表

2.如{1..100} 或 $(seq  1  2  100 )

3.返回列表的命令  $(cmd)

4.可以使用glob,如*.sh

5.变量引用 :$1 $2 $3 $# $@

while语句

格式:

while     满足条件   ;    do
循环体
done

当条件为真时进入循环、为假使退出循环

条件一般应该有循环控制变量;而此变量的值会在循环体不断地被修正

条件:CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后
会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环

例子:

QQ图片20180510201919

while语句的特殊用法

while    read     line  ;   do
循环体
done < /PATH/FROM/SOMEFILE

依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line

until语句

格式

until      CONDITION    ;    do
循环体
done

进入条件: CONDITION 为false
退出条件: CONDITION 为true

until与whtil特别的像 ,只是它们的判断条件有些不同,正好相反。

 

退出循环语句命令:

continue  [n]  提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第一层

break [n] 提前结束第N层循环,最内层为第1层

这些命令可以使我们的脚本更加的灵活

 

我们可以用这些循环做些有意思的事:

创建无限循环:

while true; do
循环体
done

until false; do
循环体
Done

自定义打印国际象棋盘

echo -e “\e[1;33m<<******黄色43******>>\e[0m”
echo -e “\e[1;34m<<******蓝红44******>>\e[0m”
echo -e “\e[1;35m<<******洋色45******>>\e[0m”
echo -e “\e[1;36m<<******青色46******>>\e[0m”
echo -e “\e[1;37m<<******白色47******>>\e[0m”
read -p “The first color you want to choose is: ” ning
read -p “The second colors you want to choose are: ” meng
read -p “Please specify the size of the block: ” num
#color=`echo -e “\e[1;${ning}m\e[0m”`
for (( k=1 ; k<=$num ; k++ )) do
N=$N`echo -e “\e[1;${ning}m \e[0m\c”`
done
for (( k=1 ; k<=$num ; k++ )) do
M=$M`echo -e “\e[1;${meng}m \e[0m\c”`
done
#不能直接把很多个空格赋给变量,要用追加变量的方法
for (( i=1 ; i<=8 ; i++ )) ;do
# let n=$k*4
for (( j=1 ; j<=$num/2 ; j++ ));do
if [ $[i%2] -eq 0 ];then
for m in {1..4};do
#echo -e “\e[1;41m \e[0m\e[1;43m \e[0m\c”
echo -e “$N${M}\c”
# else
done
else
for l in {1..4};do
echo -e “$M${N}\c”
#echo -e “\e[1;43m \e[0m\e[1;41m \e[0m\c”
done
fi
echo

echo -e “\e[1;33m<<******黄色43******>>\e[0m”
echo -e “\e[1;34m<<******蓝红44******>>\e[0m”
echo -e “\e[1;35m<<******洋色45******>>\e[0m”
echo -e “\e[1;36m<<******青色46******>>\e[0m”
echo -e “\e[1;37m<<******白色47******>>\e[0m”
read -p “The first color you want to choose is: ” ning
read -p “The second colors you want to choose are: ” meng
read -p “Please specify the size of the block: ” num
#color=`echo -e “\e[1;${ning}m\e[0m”`
for (( k=1 ; k<=$num ; k++ )) do
N=$N`echo -e “\e[1;${ning}m \e[0m\c”`
done
for (( k=1 ; k<=$num ; k++ )) do
M=$M`echo -e “\e[1;${meng}m \e[0m\c”`
done
#不能直接把很多个空格赋给变量,要用追加变量的方法
for (( i=1 ; i<=8 ; i++ )) ;do
# let n=$k*4
for (( j=1 ; j<=$num/2 ; j++ ));do
if [ $[i%2] -eq 0 ];then
for m in {1..4};do
#echo -e “\e[1;41m \e[0m\e[1;43m \e[0m\c”
echo -e “$N${M}\c”
# else
done
else
for l in {1..4};do
echo -e “$M${N}\c”
#echo -e “\e[1;43m \e[0m\e[1;41m \e[0m\c”
done
fi
echo

代码复制下来有点格式有点乱,不过还可以用

自定义打印矩形

read -p “Please enter the width value: ” high
read -p “Please enter the height value: ” width
for i in `seq $high` ;do
for j in `seq $width` ;do
color=$[RANDOM%7+31]
echo -e “\e[1;${color}m*\e[0m\c”
done
echo
done

因为时间原因今天博客就写到这,不过接下来会持续更新

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/98084

(1)
上一篇 2018-05-10 20:09
下一篇 2018-05-10 20:58

相关推荐

  • 小白加薪升职记第一次笔记

    选择了马哥,你就站在了技术的前端。

    2018-05-12
  • linux发行版的基础目录名称命名法则和功用规定

    一.文件名使用法则;      1.严格区分字符大小写      2.目录也是文件,在同一路径下,两个文件不能同名      3.文件名除了/以外的任意字符都可以使用,最长不超过255字符。      4.所有由.开头的文件都是隐藏文件。 二.文件系统:层级结构;有索引;      /:原初起点:      第二层结构;      第三层结构;      倒…

    Linux笔记 2018-05-13
  • Docker容器技术之Dokcer networking

    我们知道,docker容器中的资源用namespace进行了隔离,每一个容器中都有自己独立的一套网络资源,docker容器如何实现单机通讯与跨主机通讯呢?本节内容将为你解答这个问题。

    2018-08-08
  • 第七周

    1、简述linux操作系统启动流程 inux系统启动流程大致是这样的: post ->BIOS(Boot Sequence) –> MBR(GRUB) –> Kernel(ramdisk) –> rootfs –> /sbin/init(/etc/inittab) BIOS 主板在接通电源后,BIOS会第一个获得系统的控制权。B…

    Linux笔记 2018-07-15
  • shell脚本编程

    shell脚本基础篇——简单介绍脚本的书写规范

    2018-04-12
  • IP路由

    IP路由

    2018-05-22