1、顺序结构体

命令从上往下顺序执行

2、分支结构体

1)判断真假

test 表达式  或者  [ 表达式 ](必须有空格)    真返回0,假返回1  test的别名是[, 参数是]

判断表达式 记忆 解释
!表达式    
表达式1 -a 表达式2 and 相与
表达式2 -o 表达式2 or  
-z string zero string为空字符串,则返回真0
-n string not zero  
string1 = string2   两个字符窗相等,返回0
string1 != string2    
INTEGER1 -eq INTEGER2 equal  
INTEGER1 -ge INTEGER2 greater equal 大于等于
INTEGER1 -gt INTEGER2 greater 大于
INTEGER1 -le INTEGER2 little  equal   小于等于
INTEGER1 -lt INTEGER2  little 小于
INTEGER1 -ne INTEGER2   not equal 不等

文件存在?文件类型?

-d FILE dir 如果FILE是目录则为真
-e FILE  同-a  exists 是否存在如果是文件则为真
-N     检测文件自从上次读取之后是否被修改
-f   是否是文件,是否是常规文件
-s     文件存在且不为空
-b、-c、-L、S、p  

块文件、字符文件、符号连接

套接字、命名(FIFO)管道

硬连接实际是文件本身    

rwx

-r、-w、-x read 存在且可读、、
-g、-u sgid、suid 以文件所有用户/组的身份运行

属主、属组

-O、-G   是否属于当前用户或组

-ef 比较两个文件是否为同一文件系统中相同inode节点的硬连接,

比较文件是否相同用diff -q $file1 $file2,相同返回码0

if [ new -nt old ]; then比较修改时间mtime  n——new    t——time     o——old  -ot/-nt  不能对访问时间atime  inode修改时间ctime进行测试

字符串比较测试

[ = ]   [ != ]  [[ > ]]   [[ < ]]

-z  空字符串;最好用“”把变量引起来,因为当为空时没引号会是这样 [ -z  ]不合法

-n  非空字符串;

正则表达式测试

#!/bin/bash
for rpms in /home/lixn/Downloads/*
do
rpmname=`basename $rpms`
if [[ $rpmname =~ .*\.rpm ]];then
echo "$rpmname is a .rpm package"
else
echo "File \"$rpmname\" is not a .rpm name"
fi
done

也有类似python正则的(),

if [[ $rpmname =~ (.+)_(.*)_(.*)\.rpm ]]; then
echo “package ${BASH_REMATCH[]}第一个括弧

bash正则表达式

 数值测试 -eq  -ne -lt -gt  -le  -ge  
组合测试 &&——逻辑与      if [ -r "$filename" ] && [ -s "$filename" ]; then md5sum $filename   前边不成立后边就不进行了(短路)
       ||——逻辑或

例如:

[lixn@localhost ~]$ [-d learn] && cd learn
bash: [-d: command not found...
[lixn@localhost ~]$ [ -d learn ] && cd learn
[lixn@localhost learn]$

2)if分支语句

if list; then list; [elif list; then list]...[else list] fi;then后可以没有换行符,换行可以用;代替

#!/bin/bash
if [ `id -u` -eq 0 ]; then
PS1='##'
else
PS1='$$'
fi

3) case分支语句,可以使用模式匹配

#!/bin/bash
case $ in
[-]) echo 'digital';;
[a-z]) echo 'lower char';;
[A-Z]) echo 'upper char';;
"Good") echo 'OK';;
*) cd /tmp  
touch a
echo "Other";;
esac ;;——表示不再执行其他语句
;;&——表示还要匹配接下来的所有模式
;&——表示接下来的模式已经匹配

3、循环语句

1)for循环语句

for name [ [ in [ word ... ] ] ; ] do list; done

for (( expr1; expr2; expr3 )) ; do list; done

#!/bin/bash
for i in
do
echo -n "$i次|"
done
cd /tmp
for fil in * ; do
[ -f ${fil} ] && mv ${fil} ${fil}.old
[ -d ${fil} ] && break
done total=
for ((i=; i<; i=i+))
do
[ `expr $i % ` -eq ] && continue
total=`expr ${total} \* $i`
done
echo ${total}

2)while循环

while list; do list; done

#!/bin/bash
#通过管道循环读取/etc/passwd内容
cat /etc/passwd | while read line
do
#以:为分割符,只读取第一个字段
user=`awk -F : '{print $1}' <<< ${line}`
echo "Account: ${user}" done

3) select选择语句

   PS3="Please Select:"
menus="com|net|org|edu|quit"
IFS="|"
a='Apply '
b=' domain'
select item in $menus
do
case $item in
com) echo "$a$item$b";;
net) echo "$a$item$b";;
org) echo "$a$item$b";;
edm) echo "$a$item$b";;
quit) break;;
esac
done

4)break  continue 循环控制

         for fil in *
do
if [ $fil = "." -o $fil = ".." ]
then
echo 'x'
continue
fi
echo $fil
[ $fil = '' ] && break
cp -r $fil $fil.old
done

shell脚本2——控制语句的更多相关文章

  1. shell脚本学习心得

    近来主要捣鼓ubuntu,大多数项目中都用到了sh脚本作为启动脚本等,以前只是大概明白如何使用,今天需要自己修改并运行脚本就碰到了很多问题,所以决定静下心来学习一下shell脚本,学习了几个小时,现将 ...

  2. shell脚本二

    在shell脚本一 中,我讨论了shell脚本的语法规范,shell脚本的变量,以及shell脚本的测试语句. 仅仅懂得这些只能写简单的脚本,在简单的脚本中各条语句按顺序执行,从而实现自动化的管理,顺 ...

  3. Linux运维初级教程(一)Shell脚本

    序,掌握shell脚本是linux运维工程师的最基础技能. 一.脚本语言 与高级语言不通,脚本语言运行时需要调用相应的解释器来翻译脚本中的内容. 常见的脚本语言有Shell脚本.Python脚本.ph ...

  4. 【Shell脚本学习1】Shell简介:什么是Shell,Shell命令的两种执行方式

    Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释 ...

  5. shell脚本编写笔记

    包含转载内容,转载自http://wenku.baidu.com/link?url=jtCHxEYzgGve6P64U3JRQRgU6nhpGvqFLLpWu9I2Htq6hi9TGLudRFkk7r ...

  6. Linux系统编程(15)——shell脚本语法

    Shell字符串 字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号.单双引号的区别跟PHP类似. 单引号 s ...

  7. shell 脚本阅读之二——ltp工具下的runltp

    #!/bin/sh ################################################################################ ## ## ## ...

  8. Shell 脚本常用命令

    Shell脚本是Linux开发工作中常用的工具,但是我一直没有找到一个适合自己的简明扼要的HandBook.在工作过程中整理了一下,贴在这里已备查看. 1           Shell中的特殊符号 ...

  9. [转载]关于shell脚本的基本语法

    关于shell脚本的基本语法 整理于:2014-03-31,何俭飞,mymladdr@sina.com 一.执行 1.shell脚本如果要被执行,一般地必须要有执行权限"x"(除了 ...

随机推荐

  1. Python开发【第四篇】语句与函数

    语句 statement 语句是由一些表达式组成,通常一条语句可以独立的执行来完成一部分事情,并且形成结果. 多条语句写在一行内要用分号分开 例子: print('hello world') #这是一 ...

  2. IIS6.0使用冒号上传漏洞利用

    利用条件: 1.iis版本为6.0  2.上传文件名不会重命名 利用: 上传一个jpg木马图片 名字为:cs.asp:.jpg 注意是: 默认windows是不允许文件字含:(冒号)的 所以需要抓包后 ...

  3. Python编程系列---获取请求报文行中的URL的几种方法总结

    在浏览器访问web服务器的时候,服务器收到的是一个请求报文,大概GET请求的格式大概如下: 先随便拿到一个请求报文,蓝色即为我们要获取的 GET  /index.html  HTTP/1.1  Hos ...

  4. 3. SOFAJRaft源码分析— 是如何进行选举的?

    开篇 在上一篇文章当中,我们讲解了NodeImpl在init方法里面会初始化话的动作,选举也是在这个方法里面进行的,这篇文章来从这个方法里详细讲一下选举的过程. 由于我这里介绍的是如何实现的,所以请大 ...

  5. Mongoose-modified-at 时间自动记录插件介绍

    Mongoose-modified-at 是一款自动更新字段变化时间并记录到数据库中的 Mongoose 插件,类似 Mongoose 自带的 timestamps 功能. 使用场景 让我们考虑一个场 ...

  6. Mysql高手系列 - 第27篇:mysql如何确保数据不丢失的?我们借鉴这种设计思想实现热点账户高并发设计及跨库转账问题

    Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 欢迎大家加我微信itsoku一起交流java.算法.数据库相关技术. 这是Mysql系列第27篇. 本篇文章我们先来 ...

  7. 美团 iOS 端开源框架 Graver 在动态化上的探索与实践

    近些年,移动端动态化技术可谓是“百花齐放”,其中的渲染性能也是动态化技术一直在探索.研究的课题.美团的开源框架 Graver 也为解决动态化框架的渲染性能问题提供了一种新思路:关于布局,我们可以采用“ ...

  8. SpringCloud之整合Zipkin+Sleuth(十四)

    1.添加依赖 在项目的pom.xml文件中添加下面依赖 <!--里面包含两个依赖--> <dependency> <groupId>org.springframew ...

  9. SpringBoot整合RabbitMq(二)

           本文序列化和添加package参考:https://www.jianshu.com/p/13fd9ff0648d RabbitMq安装 [root@topcheer ~]# docker ...

  10. 消息队列 ActiveMQ 、RocketMQ 、RabbitMQ 和 Kafka 如何选择?

    「 预计阅读 6 分钟 」 旁白:这是一篇拖更了N久的文章...0.0(看不见我~) 往期回顾 前端框架 jQuery 和 Vue 如何选择? 安全框架 Shiro 和 Spring Security ...