1.脚本文件

  Shell脚本一般以.sh为后缀名.但注意在Linux中.sh不是作为文件类型识别的依据,仅仅只是用来向看到的人标记这是一个Shell脚本而已.

  Shell脚本一般有一个头声明 #!/bin/bash  告诉Linux应该用什么来执行脚本,如果没有,Linux默认将使用bash来执行脚本

2.脚本的执行方式

  source  [文件名]

  .  [文件名]

  ./  [文件名]  (注意这种方式文件需要有执行权限)

  bash/dash/sh    [文件名]

3.管道符

  管道符 | :将上一个命令的执行结果作为下一个命令的参数传入.这是一个非常有用的使用

  一个使用率非常的高的语句 ps *** | grep 'xxxx' 就是一个管道符的最好例子. 这句话的本意是 执行ps **** ,并在返回结果再执行过滤 'xxxx'

4.重定向

  Linux标准是由输入设备(键盘)获取输入,将结果输出到输出设备(屏幕).重定向就是这个输入输出的转向

  4.1 标准重定向

    输入重定向

      < 输入重定向

      例 wc < file 对file文件的内容进行单词计数.

    输出重定向

      >输出重定向(以覆盖方式)  >>输出重定向(以追加方式)

      例: ls > file 将ls的执行结果放入file文件中(ls的输出本来是屏幕,输出重定向到文件)

    &> 混合输出

  4.2 签入文档重定向

    <<delimiter delimiter   将delimiter之间的内容作为输入传入给前面的命令

    例:$wc -l << EOF

      xxx

     EOF

  4.3 黑洞重定向

    command > /dev/null

    /dev/null是Linux定义的一个特殊的存在.所有向它写入的东西将全部消失,所有向它读取的东西将什么也读不到,所以称之为黑洞.

5.变量

  5.1 自定义变量

    5.1.1 变量的声明

      shell中变量区分大小写,可以以字母或者下划线开头.规范是系统变量全大写,自定义变量纯小写,以下划线分割

      注意:shell中定义变量temp=1,=前后不能有空格.

    5.1.2 变量的作用范围(局部&全局)

      export 声明: export是将声明的变量由局部变量升级为全局变量.默认情况下声明的变量只会在当前运行的shell环境有效,export后变量可以再进入新的shell环境后依然有效

  5.2 预定义变量

    由bash预先定义的一些特殊变量,可以直接使用但不能修改

      $$ 当前脚本执行的进程ID

      $0 当前脚本的文件名

      $n(1-9) 执行脚本传入的第n个参数    

      $# 执行脚本传入的参数的格式

      $*  执行脚本传入的所有参数 当被双引号包裹时,$*将所有参数作为一个整体输出 " a b c d"

      $@ 执行脚本传入的所有参数 当被双引号包裹时,$@将所有参数分开作为个体输出  "a" "b" "c" "d"

      $? 上个命令的退出状态或者函数执行的返回值

  5.3 变量的数学运算

    变量的数学计算不能直接使用. A+B在shell中的含义是A和B两个作为字符串拼接.

    数学计算需要使用 expr 关键字

      expr [变量] [运算符]  [变量2]   <=注意,运算符的前后必须有空格

      例子: c=`expr $x + $y`

6.流程控制

  6.1 if 语句

    6.1.1 语法    

        if [[ 条件 ]];then...elif [[ 多个条件 ]];then...else...fi   6.1.2 条件符

     数值比较        -eq 测试两个整数是否相等        -ne 测试两个整数是否不等            -gt 测试一个数是否大于另一个数            -lt 测试一个数是否小于另一个数            -ge 大于或等于            -le 小于或等于

       字符串比较

[ -z STRING ] 如果STRING的长度为零则为真 ,即判断是否为空,空即是真;
                            [ -n STRING ] 如果STRING的长度非零则为真 ,即判断是否为非空,非空即是真;
                            [ STRING1 = STRING2 ] 如果两个字符串相同则为真 ;
                            [ STRING1 != STRING2 ] 如果字符串不相同则为真 ;
                            [ STRING1 ]  如果字符串不为空则为真,与-n类似

        文件&文件夹&目录比较        
[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。
                           [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。
                           [ -d DIR ] 如果 FILE 存在且是一个目录则为真。
                           [ -e FILE ] 如果 FILE 存在则为真。
                           [ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。
                           [ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。
                           [ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。
                           [ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。
                           [ -r FILE ] 如果 FILE 存在且是可读的则为真。
                           [ -s FILE ] 如果 FILE 存在且大小不为0则为真。
                           [ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。
                           [ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。
                           [ -w FILE ] 如果 FILE存在且是可写的则为真。
                           [ -x FILE ] 如果 FILE 存在且是可执行的则为真。
                           [ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。
                           [ -G FILE ] 如果 FILE 存在且属有效用户组则为真。
                           [ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。
                           [ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。
                           [ -S FILE ] 如果 FILE 存在且是一个套接字则为真。
                           [ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not则为真。
                           [ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。
                           [ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。
  6.2 while 语句
    6.2.1 语法
      while argument;
      do
        .....
      done
    6.2.2 例子     
         COUNTER=0while [ $COUNTER -lt 5 ]doCOUNTER='expr $COUNTER+1'echo $COUNTERdone
         while read textdoecho ${text}done < /home/infile

  6.3 case 语句
    6.3.1 语法
      case $变量名 in

模式1)

    ....

  ;;

 模式2)

    ....

   ;;

 *)

    .....

     ;;

  esac

      case行尾必须为单词“in”,每一个模式必须以右括号“)”结束。

    双分号“;;”表示命令序列结束。

    匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。

    最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后的命令序列。

转载于:https://www.cnblogs.com/NightPxy/p/9188226.html

[Linux]-Shell编程与规范相关推荐

  1. 《Linux Shell编程从初学到精通(第2版)》pdf

    下载地址:网盘下载 内容简介 编辑 shell是用户与内核进行交互操作的一种接口,是linux最重要的软件之一.目前最流行的shell称为bash shell,bash shell脚本编程以其简洁.高 ...

  2. Linux Shell 编程学习总结

    Shell 教程 Shell简介:什么是Shell,Shell命令的两种执行方式 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成 ...

  3. linux实验三shell程序设计,实验三 LINUX SHELL编程

    精选文库 -实验三LINUX SHELL 编程 四.实验内容 本实验包含两个具体的SHELL程序编写任务,较为全面地涉及了SHELL 程序的设计方法和技术.内容如下: 1.创建以下菜单程序: USER ...

  4. linux —— shell 编程(文本处理)

    导读 本文为博文 linux -- shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed a ...

  5. 【“计算机科学与技术”专业小白成长系列】Linux Shell 编程 极简教程

    Linux Shell 编程 极简教程 内容摘要 本文是 Linux Shell 编程简单入门.主要内容: Linux 简介 Shell 编程入门 Kotlin 脚本与 Shell 脚本 Linux ...

  6. linux简单重定向代码,Linux Shell编程(26)——代码块重定向

    像 while, until, 和 for 循环代码块, 甚至 if/then 测试结构的代码块都能做到标准输入的重定向. 即使函数也可以使用这种重定向的格式 .所有的这些依靠代码块结尾的 < ...

  7. Linux Shell编程语句case

    Linux Shell编程case语句 case语句 case语句适用于需要进行多重分支的应用情况. case分支语句的格式如下:case $变量名 in模式1)命令序列1;;模式2)命令序列2;; ...

  8. linux shell 处理日语,linux —— shell 编程(文本处理)

    导读 本文为博文linux -- shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 1.基本文本处理 sort:用于排序,常 ...

  9. linux怎么退出shell编程,Linux Shell编程(11)——退出和退出状态

    exit命令一般用于结束一个脚本,就像C语言的exit一样.它也能返回一个值给父进程. 每一个命令都能返回一个退出状态(有时也看做返回状态).一个命令执行成功返回0,一个执行不成功的命令则返回一个非零 ...

  10. 「Linux」Linux Shell 编程基础入门

    Linux Shell 编程基础入门 1. 变量 1.1 变量定义 1.2 使用变量 1.3 引号 1.4 将命令的结果赋值给变量 1.5 位置参数 1.6 特殊变量及其含义 2. 字符串 2.1 字 ...

最新文章

  1. 翻转单词顺序与左旋转字符串
  2. Image Semantic Segmentation之DeepLab两个坑
  3. map for循环_Java_foundations_1 如何遍历Map
  4. java 伴随矩阵_C#计算矩阵的逆矩阵方法实例分析
  5. 逆水寒7月19服务器维护,逆水寒7月19日更新维护公告 更新内容汇总
  6. 2021年四川高考成绩在哪里查询,2021年四川高考成绩查询系统入口,四川高考成绩怎么近查询系统...
  7. 在html中代码规范是哪个键,HTML代码规范经验
  8. php ajax 上传视频教程,PHP+Ajax从入门到精通全套视频教程 传智播客Ajax实战教程 共15课...
  9. Windows 7 驱动开发
  10. 应急指挥调度管理系统|城市综合应急指挥调度系统
  11. 【打卡-Coggle竞赛学习2023年3月】对话意图识别
  12. 原生Js弹窗插件|web弹出层组件|对话框
  13. Python游戏末日丧尸
  14. c语言程序设计西安理工,c语言程序设计-西安理工大学三电教学中心!.doc
  15. apk瘦身 提高优化效果
  16. es 主要内存使用大户
  17. 辐射安全管理考试笔记
  18. 清明节 java_java生成12位唯一id 2013.3.12大三班清明节生成活动记录表.doc
  19. 计算机毕业设计系列基于基于SSM的小区物业信息管理系统
  20. 搜索其他计算机共享的打印机,打印机共享后其他电脑搜索不到_共享打印机查找不到_打印机品牌排行榜...

热门文章

  1. [渝粤教育] 中国地质大学 管理信息系统 复习题 (2)
  2. [渝粤教育] 西南科技大学 理论力学 在线考试复习资料(1)
  3. python2项目出现的错误(UnicodeDecodeError)
  4. 2018年湘潭大学程序设计竞赛 F maze
  5. 第一模块:开发基础 第1章 练习及作业
  6. [转]隐马尔科夫模型HMM
  7. python-下拉框处理
  8. 6.解决AXIOS的跨域问题
  9. 全新的membership框架Asp.net Identity(2)——绕不过的Claims
  10. Linq 常用方法解释