shell-流程控制-3

条件判断

格式1:test 条件表达式

格式2:[ 条件表达式 ] 条件表达式前后都有空格

格式3:[[ 条件表达式 ]] 条件表达式前后都有空格,支持正则表达式

文件测试

格式:[ 操作符 文件 ]

文件测试常用参数

[root@localhost ~]# [[ -d /home ]] && echo $?
0
[root@localhost ~]# [ -d /home ] && echo $?
0
[root@localhost ~]# test -d /home &&echo $?
0
[root@localhost ~]# [ ! -d /ccc ]  && mkdir /ccc

数值比较(整数)

示例:

[root@localhoat ~]# id -u
0
[root@localhost ~]# [ $(id -u) -eq 0 ] && echo "当前是超级用户"
当前是超级用户
[alice@localhost ~]$ [ $UID -eq 0 ] && echo "当前是超级用户" || echo "you不是超级用户"
you不是超级用户
 
C语言风格的数值比较(了解)
[root@localhost ~]# ((1<2));echo $?
0
[root@localhost ~]# ((1==2));echo $?
1
[root@localhost ~]# ((1>2));echo $?
1
[root@localhost ~]# ((1>=2));echo $?
1
[root@localhost ~]# ((1<=2));echo $?
0
[root@localhost ~]# ((1!=2));echo $?
0
[root@localhost ~]# ((`id -u`>0));echo $?
1
[root@localhost ~]# (($UID==0));echo $?
0

 

字符串比较

字符串比较时要加双引号

[root@localhost ~]# [ "$USER" = "root" ];echo $?
0
[root@localhost ~]# [ "$USER" == "root" ];echo $?
0
注意:
"":弱引用,可以实现变量和命令的替换
[root@localhost ~]# x=*
[root@localhost ~]# echo "$x"
*
'':强引用,不完成变量替换
[root@localhost ~]# x=*
[root@localhost ~]# echo '$x'
 $x

扩展:判断变量字符串是否为空
-z:变量字符串为空,返回值0

-n:变量字符串不为空,返回值0

[root@localhost ~]# var1=111
[root@localhost ~]# var2=
[root@localhost ~]# 							//var3变量没有定义
[root@localhost ~]# echo ${#var1}  #显示变量中字符串的个数
3
[root@localhost ~]# echo ${#var2}
0
[root@localhost ~]# echo ${#var3}
0
[root@localhost ~]# [ -z "$var1" ];echo $?   //-z 变量字符串为空
1
[root@localhost ~]# [ -z "$var2" ];echo $?
0
[root@localhost ~]# [ -z "$var3" ];echo $?
0
[root@localhost ~]# [ -n "$var1" ];echo $?  //-n 变量字符串不为空
0
[root@localhost ~]# [ -n "$var2" ];echo $?
1
[root@localhost ~]# [ -n "$var3" ];echo $?
1

条件结构

流控制

在一个shell脚本中的命令执行顺序称作脚本的流。大多数脚本会根据一个或多个条件来改变它们的流。

流控制命令:能让脚本的流根据条件而改变的命令称为条件流控制命令

exit语句:退出程序的执行,并返回一个返回码,返回码为0正常退出,非0为非正常退出

if语句

if结构

单分支结构

条件判断语法:
if [判断条件]---代码返回0表示真,非0为假
 
if 条件测试
then 命令序列
fi
 
if [ condition ];then
		command
		command
fi
 
if test 条件;then
	命令
fi
 
if [[ 条件 ]];then
	命令
fi

双分支结构

if 条件测试
then 命令序列
else 命令序列
fi
 
if [ 1 -eq 2 ];then
    echo 不可能
else
    echo 不等于
fi

 多分支结构

if 条件测试1
then 命令序列
 
[elif 条件测试2
then 命令序列
 
elif 条件测试3 
then 命令序列]...
 
else 命令序列
fi

层层嵌套结构

if [ condition1 ];then
		command1		
		if [ condition2 ];then
			command2
		fi
 else
		if [ condition3 ];then
			command3
		elif [ condition4 ];then
			command4
		else
			command5
		fi
fi
 
如果条件1满足,执行命令1;如果条件2也满足执行命令2,如果不满足就只执行命令1结束;
如果条件1不满足,不看条件2;直接看条件3,如果条件3满足执行命令3;如果不满足则看条件4,如果条件4满足执行命令4;否则执行命令

循环结构

for循环

语法结构:for i in {范围}

for i in {取值范围}  #for是关键字 i是变量名 in是关键字
do                  #循环体的开始
				循环体
done                #循环体的结束
 
for语句需要定义一个变量和取值范围,根据不同的变量值值执行相同的命令,直到变量值用完。

两种格式

c语言风格
for ((i=1; i<=100; i++))   初值;条件;自增 
do
    echo $i
done
 
i++===先赋值再运算
++i===先运算再赋值
 
(1)i++实例:
for  (( i=1;i <= 5;i++ ))
do
        let x=i++        i:2  4   6
        echo $i          x: 1  3   5
        echo $x
done
 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
(2)++i实例:
for  (( i=1;i <= 5;++i ))
do
        let x=++i          i:2  4   6
        echo $i            x: 2  4   6 
        echo $x
done
 
python风格
for i in {1..100}
do
    echo $i
done
 
另一种写法:seq的使用
for i in $(seq 1 100)       seq 1 100=1-100
do
    echo $i
done
案例
批量添加账户:
#!/usr/bin/env bash
#批量添加账户
for i in {30..40}
        do
                useradd user$i && echo "123" | passwd --stdin user$i &>/dev/null
                        if [ $? -eq 0 ];then
                                echo "账户 user$i 添加成功"
                        else
                                echo "账户 user$i 添加失败"
                        fi
        done
 
批量删除账户:
#!/usr/bin/env bash
#批量删除账户
for i in {30..40}
        do
                userdel -r user$i &>/dev/null
                [ $? -eq 0 ] && echo "账户 user$i 删除成功" || echo "账户 user$i 删除失败"
        done  

while循环

不断重复的执行循环体中的语句,直到某个条件成立

while语句结构
while 条件测试
do
	循环体
done
当条件测试成立(条件测试为真),执行循环体
 
until语法结构
until 条件测试
do
	循环体
done
当条件测试成立(条件测试为假),执行循环体
案例
#!/bin/bash
i=1
until [ "$i" -eq 21 ]
do
    userdel -r user$i
    let i++
done
 
案例
echo  "please enter a number between 5 and 10 :" 
read var
while [[ $var != 0  ]]
do
 
    if [ "$var" -lt 5 ] 
    then
            echo "Too smail , Try again"
            read var
    elif [ "$var" -gt 10 ]
    then 
            echo "Too big , Try again"
            read var
     else
        echo "Congratulation! You are right."
        exit 0;
     fi
done  

case匹配模式

case 语法结构
case $变量 in
     pattern1)
          list1
          ;;                     ---------------------结尾。
     pattern2)
          list2
          ;;
     ... ...
     patternN)
          listN
         ;;
    *)                       --------------------> 如果前面命令没有执行成功那么执行下面这个
         list*
         ;;
esac
 
命令;;表明流应该跳转到case语句的最后,类似C语言中的break指令。
第一行: 声明case关键字调用case语法, 紧跟的“变量”一般为用户的输入值, in代表从下方的各个模式进行匹配 
第2-4行: 匹配到“pattern1”后进行命令的输出或执行, pattern1: 一般为字符或数值
第11-12行: 当用户输入的字符不存在匹配模式时, 直接执行或打印*)下的命令或语句

示例

#!/usr/bin/env bash
cat <<-EOF 
+-------------------------------------------------------------------------+ 
|                             System_tools V1.0                           | 
+-------------------------------------------------------------------------+
|                     a. Stop And Disabled Firewalld.                     |
|                     b. Disabled SELinux Secure System.                  |
|                     c. Install Apache Service.                          |
|                     d. Quit                                             | 
+-------------------------------------------------------------------------+ 
EOF
echo "Please input your select: " && read var
case "$var" in
  	"a")
        systemctl stop firewalld && systemctl disable firewalld
				;; 
		"b")
				setenforce 0
				;; 
		"c")
				yum -y install httpd httpd-tools
				;; 
		"d")
				exit
				;; 
			*)
				printf "请按照上方提供的选项输入!!!\n"
				;; 
esac
 
可以搭配while循环增强脚本可用性

循环控制语句

break:在语句块执行过程中终止循环,并且跳出整个循环

contiue:在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。

exit:在语句块执行过程中退出脚本

格式化打印

printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。使用 printf 的脚本比使用 echo 移植性好。

语法格式:printf  format-string  [arguments...]
• format-string: 为格式控制字符串
• arguments: 为参数列表。
 
$ echo "Hello, Shell"
Hello, Shell
 
$printf "Hello, Shell" 
 
$ printf "Hello, Shell\n"
Hello, Shell        
 
vim printf.sh
#!/bin/bash        
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f\n" 张三 男 66.1234 
printf "%-10s %-8s %-4.2f\n" 李四 男 48.6543 
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
 
%s %f都是格式替代符
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中.2指保留2位小数。
 
- 左/右对齐
字符串:%s
小数:%f
数字:%d

颜色

shell脚本中echo显示内容带颜色显示,需要使用到-e参数
格式1:echo -e “\033[背景颜色;字体颜色m 要输出的字符 \033[0m”
格式2:echo -e “\e[背景颜色;字体颜色m 要输出的字符 \e[0m”
 
echo -e “\033[30m 黑色字 \033[0m”
echo -e “\033[31m 红色字 \033[0m”
echo -e “\033[32m 绿色字 \033[0m”
echo -e “\033[33m 黄色字 \033[0m”
echo -e “\033[34m 蓝色字 \033[0m”
echo -e “\033[35m 紫色字 \033[0m”
echo -e “\033[36m 天蓝字 \033[0m”
echo -e “\033[37m 白色字 \033[0m”
echo -e “\033[40;37m 黑底白字 \033[0m”
echo -e “\033[41;37m 红底白字 \033[0m”
echo -e “\033[42;37m 绿底白字 \033[0m”
echo -e “\033[43;37m 黄底白字 \033[0m”
echo -e “\033[44;37m 蓝底白字 \033[0m”
echo -e “\033[45;37m 紫底白字 \033[0m”
echo -e “\033[46;37m 天蓝底白字 \033[0m”
echo -e “\033[47;30m 白底黑字 \033[0m”
 
控制选项:
\033[0m:关闭所有属性
\033[1m:高亮显示,加粗
\033[5m:闪烁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4S店客户管理小程序-毕业设计,基于微信小程序+SSM+MySql开发,源码+数据库+论文答辩+毕业论文+视频演示 社会的发展和科学技术的进步,互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。手机具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。 本文从管理员、用户的功能要求出发,4S店客户管理系统中的功能模块主要是实现管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理,用户客户端:首页、车展、新闻头条、我的。门店客户端:首页、车展、新闻头条、我的经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与4S店客户管理系统实现的实际需求相结合,讨论了微信开发者技术与后台结合java语言和MySQL数据库开发4S店客户管理系统的使用。 关键字:4S店客户管理系统小程序 微信开发者 Java技术 MySQL数据库 软件的功能: 1、开发实现4S店客户管理系统的整个系统程序; 2、管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理等。 3、用户客户端:首页、车展、新闻头条、我的 4、门店客户端:首页、车展、新闻头条、我的等相应操作; 5、基础数据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流信息的查看及回复相应操作。
现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本微信小程序医院挂号预约系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此微信小程序医院挂号预约系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。微信小程序医院挂号预约系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,医生信息管理,医院信息管理,科室信息管理,预约信息管理,预约取消管理,留言板,系统管理。微信小程序用户可以注册登录,查看医院信息,查看医生信息,查看公告资讯,在科室信息里面进行预约,也可以取消预约。微信小程序医院挂号预约系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值