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

相关推荐

  • MySQL之日志管理

    MySQL数据库中支持多种日志类型,通过分析日志,我们可以优化数据库性能,排除故障,甚至能够还原数据,本节内容将带你了解MySQL数据库中的日志管理

    2018-06-12
  • linux ACL访问控制列表

    1.ACL介绍 Linux 下用户对文件的操作权限有 r-读, w-写, x-可执行三种,而对linux 下的文件而言,用户身份分为:所有者, 所属组, 其它人, 且文件的所有者,所属组都只能是一个,所以在对文件分配用户的使用权限时,只能对这三种身份进行分配rwx 权限.Linux 主要作为服务器系统使用,用户众多.所以在实际使用场景中,这三种身份并不能很好…

    Linux笔记 2018-04-08
  • Linux命令行联系

    马哥第三周

    Linux笔记 2018-06-02
  • 正则表达式

    正则表达式REGEXP 有一类特殊符号表是控制伙同裴的功能程序支持:grep,seb,。。。基本正则表达式:BRE扩展正则表达式;ere采用不同算法经检查处理正则表达式的软件模块PCRE元字符:字符匹配,匹配次数,位置锚定,分组 man7详细文档 字符匹配.表示任意的单一字符 放在[]里表示.本身不需要转义\.转义(回归字符本身的含义)表示.本身[]表示字符…

    Linux笔记 2018-04-08
  • One

    编译器好难用T_T

    Linux笔记 2018-06-26
  • Linux学习从入门到打死也不放弃,完全笔记整理(持续更新)

    这是一片学习笔记的汇总,同步51cto,查看内容请点击各章节介绍。

    Linux笔记 2018-04-07