shll脚本格式和规则


脚本文件必须已 .sh 结尾(yuan.sh)

脚本第一行必须是:#!/bin/bash

激活脚本的二种方式(sh yuan.sh)(给脚本X权限,以绝对路径执行脚本)

逻辑与&&前面执行成功后执行后面,如果前面执行不成功则取消 逻辑或|| 前面命令执行失败后,继续执行||后面的命令 ``优先执行反引号里的命令动作

逻辑语判断是文件还是目录

  1. [root@Server yuan]# ls
  2. aaa yunjisuan
  3. [root@Server yuan]# [ -d yunjisuan ] #判断目录
  4. [root@Server yuan]# echo $?
  5. 0
  6. [root@Server yuan]# [ -d aaa ] #判断文件
  7. [root@Server yuan]# echo $?
  8. 1
  9. [root@Server yuan]# [ -f aaa ]
  10. [root@Server yuan]# echo $?
  11. 0

逻辑语判断是大于还是小于

(-gt:大于) (-lt:小于) (-eq:等于)

(-le:小于等于)(-ne:不等于)(-ge:大于等于)

read交互模式

例如:

  1. #!/bin/bash
  2. read -p "请输入你的成绩:" b #设置一变量带入脚本
  3. [ $b -lt 60 ] && echo "不及格"
  4. [ $b -eq 60 ] && echo "恰好及格"
  5. [ $b -ge 60 ] && [ $b -lt 70 ] && echo "良"
  6. [ $b -ge 70 ] && [ $b -lt 85 ] && echo "良好"
  7. [ $b -gt 85 ] && [ $b -le 100 ] && echo "优秀"
  8. [ $b -gt 100 ] && echo "作弊高手"
  9. [root@Server ~]# sh yunjisuan.sh # 执行脚本
  10. 请输入你的成绩:60
  11. bu'ji'ge

脚本传参格式

  1. [root@Server ~]# vim yunjisuan.sh
  2. #!/bin/bash
  3. echo $#
  4. echo $*
  5. echo $0
  6. echo $1
  7. echo $2
  8. echo $3
  9. echo $4
  10. [root@Server ~]# /root/yunjisuan.sh 1111 2222 #执行脚本
  11. 2
  12. 1111 2222
  13. /root/yunjisuan.sh
  14. 1111
  15. 2222
  • $# 传参数的参数总个数

  • $ 横向罗列穿入的参数*

  • $0 文件的绝对路径

  • $1对应传入的不同的参数

  • $n对应传入的不同的参数

判断字符串个数和是否为空 echo ${#变量}

  1. [root@Server ~]# xx=""
  2. [root@Server ~]# echo ${#xx}
  3. 0
  4. [root@Server ~]# xx="22"
  5. [root@Server ~]# echo ${#xx}
  6. 2
  7. [root@Server ~]# xx="22222"
  8. [root@Server ~]# echo ${#xx}
  9. 5

文本交互式插入内容

  1. [root@Server ~]# cat >yuan <<CFY
  2. > 写入内容
  3. > 写入内容
  4. > 写入内容
  5. >CFY
  6. [root@Server ~]#
  7. 命令说明:
  8. >yuan 文件名字
  9. <<CFY 结束语

脚本if条件判断

条件单分支判断:如果条件1成功那么执行动作1,否则执行动作2

  1. #!/bin/bash
  2. read -p "请输入一个数字" x
  3. if [ $x == 60 ];then
  4. echo "猜对了"
  5. else
  6. echo "猜错了"
  7. fi
  8. [root@Server ~]# sh yunjisuan.sh # 执行脚本
  9. 请输入一个数字40
  10. 猜错了
  11. [root@Server ~]#

多分支判断:如果条件1成立;那么执行动作1,否则如果条件2成立;执行动作2,否则条件1和2都不成立一律执行动作3

多个条件时加 elif

  1. #!/bin/bash
  2. read -p "请输入一个数字" x
  3. if [ $x == 60 ];then
  4. echo "猜对了"
  5. elif [ $x -lt 60 ];then
  6. echo "猜小了"
  7. else
  8. echo "猜大了"
  9. fi
  10. [root@Server ~]# sh yunjisuan.sh # 执行脚本
  11. 请输入一个数字:60
  12. 猜对了
  13. [root@Server ~]#

脚本for循环

  1. #!/bin/bash
  2. for a in 1 2 3 4 5
  3. do
  4. echo $a全部都是数字
  5. done
  6. [root@Server ~]# sh yunjisuan.sh # 执行脚本
  7. 1全部都是数字
  8. 2全部都是数字
  9. 3全部都是数字
  10. 4全部都是数字
  11. 5全部都是数字

C语言的for循环

  1. h=0
  2. for b in {1..6}
  3. do
  4. echo $h
  5. ((h++)) # 或者 let h++
  6. done
  7. [root@Server ~]# sh yunjisuan.sh
  8. 0
  9. 1
  10. 2
  11. 3
  12. 4
  13. 5
  14. 6
  15. [root@Server ~]#
  16. 命令说明:
  17. let h++
  18. 不进行++的话,变量只会执行一次,++以后就会以此往上加

脚本while无限循环

  1. read -p "随便输入一个数字:" h
  2. while [ $h -gt 0 ]
  3. do
  4. echo $h
  5. let h++
  6. done
  7. [root@Server ~]# sh yunjisuan.sh # 执行脚本
  8. 随便输入一个数字:5
  9. .....无限循环......
  10. 56443
  11. 53467
  12. 55667
  13. .....无限循环......
  14. [root@Server ~]#

case 语句格式

一般用于菜单选择,用于没有优先级的场合

  1. #!/bin/bash
  2. case $h in
  3. start)
  4. echo "服务启动"
  5. ;;
  6. stop)
  7. echo "服务停止"
  8. ;;
  9. restart)
  10. echo "服务准备停止"
  11. echo "服务开始启动"
  12. ;;
  13. *)
  14. echo "输入错误"
  15. ;;
  16. esac
  17. [root@Server ~]# /root/yunjisuan.sh start # 绝对路径执行
  18. 服务启动
  19. [root@Server ~]# /root/yunjisuan.sh stop
  20. 服务停止
  21. [root@Server ~]# /root/yunjisuan.sh restart
  22. 服务准备停止
  23. 服务开始启动

在脚本中引用一个函数库

  1. #!/bin/bash
  2. . /etc/init.d/functions
  3. case $h in
  4. start)
  5. action "服务启动" /bin/true
  6. ;;
  7. stop)
  8. action "服务停止" /bin/false
  9. ;;
  10. restart)
  11. action "服务准备停止" /bin/true
  12. action "服务开始启动" /bin/false
  13. ;;
  14. *)
  15. action "输入错误"
  16. ;;
  17. esac
  18. [root@Server ~]# /root/yunjisuan.sh start # 绝对路径执行
  19. 服务启动 [ OK ]
  20. [root@Server ~]# /root/yunjisuan.sh stop
  21. 服务停止 [FAILED]
  22. [root@Server ~]# /root/yunjisuan.sh restart
  23. 服务准备停止 [ OK ]
  24. 服务开始启动 [FAILED]
  25. [root@Server ~]#

把脚本加入到chkconfig里进行管理

  1. [root@Server ~]# cp /root/yunjisuan.sh /etc/init.d/
  2. [root@Server ~]# vim /etc/init.d/yunjisuan.sh
  3. #!/bin/bash
  4. #chkconfig: 35 90 10
  5. ......一下忽略.....
  6. [root@Server ~]# chkconfig --add yunjisuan.sh
  7. [root@Server ~]# chkconfig --list yunjisuan.sh
  8. .....省略.....

函数的格式用法

  1. #!/bin/bash
  2. function CFY(){
  3. echo "吃饭"
  4. echo "上班"
  5. echo "睡觉"
  6. echo "111111111"
  7. }
  8. CFY
  9. CFY
  10. [root@Server ~]# sh yunjisuan.sh # 执行脚本
  11. 吃饭
  12. 上班
  13. 睡觉
  14. 111111111
  15. 吃放
  16. 上班
  17. 睡觉
  18. 111111111

脚本4种循环控制语句

  • exit 强行终止脚本
  1. #!/bin/bash
  2. h=0
  3. while [ $h -lt 20 ]
  4. do
  5. if [ $h -eq 5 ];then
  6. exit
  7. fi
  8. echo $h
  9. let ++
  10. done
  11. echo "脚本继续执行"
  12. [root@Server ~]# sh yunjisuan.sh # 执行脚本
  13. 0
  14. 1
  15. 2
  16. 3
  17. 4
  18. 5
  • break 退出当前最近的循环
  1. #!/bin/bash
  2. h=0
  3. while [ $h -lt 20 ]
  4. do
  5. if [ $h -eq 5 ];then
  6. break
  7. fi
  8. echo $h
  9. let ++
  10. done
  11. echo "脚本继续执行"
  12. [root@Server ~]# sh yunjisuan.sh # 执行脚本
  13. 0
  14. 1
  15. 2
  16. 3
  17. 4
  18. 5
  19. 脚本继续执行
  • continue 终止当前本次循环进入下次循环
  1. #!/bin/bash
  2. h=0
  3. while [ $h -lt 20 ]
  4. do
  5. let $h++
  6. if [ $h -eq 5 ];then
  7. continue
  8. fi
  9. echo $h
  10. done
  11. echo "脚本继续执行"
  12. [root@Server ~]# sh yunjisuan.sh # 执行脚本
  13. 0
  14. 1
  15. ...忽略...
  16. 19
  17. 20
  18. 脚本继续执行
  • return 强行跳出函数体系从哪开始到那继续

shll脚本常用格式和规则使用的更多相关文章

  1. C#常用的命名规则汇总

    C#常用的命名规则汇总 来源 https://www.cnblogs.com/pengyouqiang88/p/5021128.html 本文转载自脚本之家 本文详细汇总了C#常用的命名规则.分享给大 ...

  2. 常用的acl规则

    一.常用的acl规则        haproxy的ACL用于实现基于请求报文的首部.响应报文的内容或其它的环境状态信息来做出转发决策,这大大增强了其配置弹性.其配置法则通常分为两步,首先去定义ACL ...

  3. Struts2 验证框架 validation.xml 常用的验证规则

    validation.xml 的命名规则和放置路径: 文件名:<ActionClassName>-validation.xml <ActionClassName>就是要验证的A ...

  4. SCI/EI期刊投稿 Reply Letter 常用格式总结

    SCI/EI期刊投稿Reply Letter常用格式总结          整个论文投稿的过程中,会遇到各种问题,需要我们向主编询问或是回复.下面主要总结了responses to the comme ...

  5. C#常用格式输出

    ylbtech- .NET-Basic:C#常用格式输出 C#常用格式输出 1.A,相关概念返回顶部 using System; namespace Test { class Formating { ...

  6. Swift - 正则表达式的使用(附用户名、邮箱、URL等常用格式验证)

    Swift虽然是一个新出的语言,但却不提供专门的处理正则的语法和类.所以我们只能使用古老的NSRegularExpression类进行正则匹配. 即先接受一个正则表达式的字符串,由此生成NSRegul ...

  7. markdown 常用格式API

    摘要 记录常用格式 参考:https://www.zybuluo.com/mdeditor 1. 标题 写法: 文字前加 #, 几个# 表示几级标题 标题下方增加 = 或 - 效果 标题1 标题2 标 ...

  8. js常用身份校验规则

    js常用身份校验规则 var Validator = { extractBirth: function(id) { // 身份证提取出生年月 var re = null, split, year, m ...

  9. MarkDown常用格式

    常用格式 ** :加粗 <br> : 换行 > :可以用来引用文章,很漂亮. 可以展开的文件夹格式 <details> <summary>框架</sum ...

随机推荐

  1. coding++ :JS对日期的神操作封装版

    格式化日期: /** * 格式化日期 * @param fmt 例如:yyyy-MM-dd 等 * @returns {*} * @constructor */ Date.prototype.Form ...

  2. java 中的字符串处理--正则表达式

    最近在做一些支付报文处理工作,需要从各种各样的报文中提取需要的信息比如(金额,订单号...),每个渠道报文各式各样,想要写一个通用的提取逻辑,于是就回顾java正则表达式的用法.当然我们可以自己写一些 ...

  3. 1+X Web前端开发(初级)理论考试样题(附答案)

    传送门 教育部:职业教育将启动"1+X"证书制度改革 职业教育改革1+X证书制度试点启动 1+X成绩/证书查询入口 一.单选题(每题 2 分,共 60 分) 1.在 HTML 中, ...

  4. Pytest系列(8) - 使用自定义标记mark

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 pytest 可以支持自定义 ...

  5. SWUSTOJ 960A题总结,又完成一个讨厌的题,内含链表操作启发

    今天debug了一个nice代码,先码在这里,SWUST OJ960 双向链表的操作问题 1000(ms) 10000(kb) 2994 / 8244 建立一个长度为n的带头结点的双向链表,使得该链表 ...

  6. jq日历一周为单位轮播

    简单效果图: 代码如下: <!doctype html> <html lang="en"> <head> <meta charset=&q ...

  7. 各种版本docker下载的中国开源地址

    最近在群里听说Docker很火,于是自己抱着试试的态度,想玩玩,可是遇到了一些问题,记录下来,方便备忘,也方便防止大家被坑. 我的虚拟机装的是centos 6.5,百度了好多教程,丫的,都不解释,就一 ...

  8. 【php】正则表达式

    一.生活当中的正则表达式: a)Notepad++.word等这些具有编辑功能的软件,都具有一个查找.替换的功能,这个功能,其实就属于正则模式的一种匹配.替换:包括windows当中可以实现的查找,也 ...

  9. java文件中字母出现的次数和百分比

    主要是文件的读写.先在代码中导入文件.一行一行的进行数据的读入,通过“  ”空格对读入的信息进行分割,存入到数组里之后对于每一个单词的每一个字母进行区分存入相应的字母数组里.最后统计总的字母个数.应用 ...

  10. django发邮件

    django发邮件 配置setting信息 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'sm ...