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
下一篇 2018-05-10

相关推荐

  • linux 基础命令

    linux 基础

    Linux笔记 2018-04-01
  • 运维第一周小结

    运维有运行和维护两层含义。对于一个系统,有时出错我们无法预知,系统越复杂,其维护难度越大,为了减少损失,我们尽可能地去预防各种错误,对于突发情况,尽可能地去修复。 平时我们所接触的大都是window的图形界面,而Linux却是另外一种风格,他完全是由命令来进行操作的一种系统,那么要想学好我觉得命令是最重要的,不仅要会使用常用的命令还要学会使用不常用的命令会通…

    2018-03-31
  • 自签证书 配置到apache的httpd、nginx的 配置文件内测试

    算是一个小整理,我在这里转了好几天,整理一下适合刚刚开始迷惑的朋友

    Linux笔记 2018-05-27
  • 模拟网络访问解析

    搭建局域网DNS解析,具体实现功能如下图 注:该测试只有正向解析 项目流程图 1. 项目前准备关闭防火墙和SELINUX,配置网络 ①开启8台机器 ②关闭防火墙及selinux iptables -vnL #查看防火墙状态 systemctl stop firewall #关闭防火墙 getenforce #查看SELinux状态 setenforce 0 …

    2018-06-04