Shell scripts 的基本格式:

1、文件开头加入shell类型指定: #!/bin/bash

2、注释使用'#',仅支持单行注释

3、语句结尾没有分号

4、参数及命令多用空格分隔

Shell scripts 中可以取得的默认特殊变量:

${0}:当前运行脚本的文件名

${n}:n为数字大于或等于1,代表当前脚本输入的第n个参数的内容。

${#}:传递给脚本或函数的参数个数。

${*}:传递给脚本或函数所有参数的集,当被双引号包含时(也就是“${*}”),参数集输出会是一个整体(也就是"${1} ${2}...")。

${@}:传递给脚本或函数所有参数的集,双引号包含还是不包含输出结果一样。

${?}:上一个命令执行后的输出状态,返回0表示执行成功,否则失败。

${$}:当前运行脚本进程ID。

变量的替换原则:

${val:-new}:若变量不存在,返回new且不改变val

${val:=new}:若变量不存在,返回new且改变val

${val:?new}:若变量不存在,返回new到stderr且不改变val

${val:+new}:若变量不存在,创建val。否则返回new

运算符:

算术运算符

算术运算使用格式$((运算内容)),比如:$((${a}+${b}))

注意:上面的运算格式,仅仅支持整数运算,浮点运算需要通过bc、awk等工具实现!

目前支持的算术运算符如下(与c/c++运算符一样):

+:加法

-:减法

*:乘法

/:除法

%:取余

=:赋值

关系运算符

注意:

1、关系运算符也仅仅支持整数运算

2、[]与其中的组件都需要有空格分隔,如[ "a" == "b" ]

3、组件必须用双引号包含!如[ "${a}" == "b" ]

目前支持的关系运算符如下(满足关系返回true,否则会false):

==:相等

!=:不相等

-eq:(equal)相等

-ne:(not equal)不相等

-gt:(greater than)左值是否大于右值

-lt:(less than)左值是否小于右值

-ge:(greater than or equal)左值是否大于或等于右值

-ls:(less than or equal)左值是否小于或等于右值

布尔运算:

!:非运算,逻辑结果取反

-a:(and)与运算,两个表达式都为真才返回true

-o:(or)或运算,两个表达式其中一个为真就返回true

字符串运算符:

=:是否相等

!=:是否不等

-z:(zreo)是否为空

-n:是否不为空

文件测试运算符:

-e:文件是否存在

-f:是否为普通档案

-d:是否为目录

-b:是否为块设置

-c:是否为字符设备

-S:是否为Socket文件

-p:是否为管道(FIFO)文件

-L:是否为链接

-r:是否有读权限

-w:是否有写权限

-x:是否有执行权限

-u:是否有SUID属性

-g:是否有SGID属性

-k:是否有粘着位(Sticky bit)

-s:是否存在且为非空档案

-nt:(newer than)左边档案是否比右边档案新

-ot:(older than)左边档案是否比右边档案旧

-ef:左右是否为同一档案,在判断硬链接比较有用

字符串:

获取字符串长度: echo ${#val} (在val前面加#)

提取字符串: echo ${val:n:m}(提取字符串n到m之间的字符串,以0开始)

数组:

注意:目前Shell仅仅支持一维数组,也是从下标0开始

定义数组:val=(val0 val1 val2...) (用空格隔开元素)

单独改变: val[n]=val0

读取元素:valn=${val[n]} (若不带下标,默认是0号元素,使用@或*获取全部元素)

printf:

printf用法与c/c++类似,但是格式不一样:

printf  format-string  [arguments...]

format-string->使用双引号,与C一样

arguments->参数之间用空格做分隔

if else :

与c/c++逻辑类似,格式略不同:

if [ expression ] (注意[]中的空格分离)then......fiif [ expression ] (注意[]中的空格分离)then......else......fiif [ expression ] (注意[]中的空格分离)then......elif [ expression ] (注意[]中的空格分离)then......else......fi

case ...esac :


与c/c++逻辑一样,根据val值匹配val1..valn,若无匹配则跳转到*选项,每个选项以;;结尾。

当多个选项输出同一结果时,用'|'组合。

 1 case val in
 2
 3  val1)
 4
 5     ;;
 6
 7  val2)
 8
 9     ;;
10
11   *)
12
13     ;;
14
15 esac

for循环:

1 for 变量 in 列表
2 do
3 command1
4 command2
5 ...
6 commandN
7 done

列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。每循环一次,就将列表中的下一个值赋给变量。

in 列表是可选的,如果不用它,for 循环使用命令行的位置参数。

注意:列表可以使用通配符等技巧,实现多种参数输入

while循环:

1 while command
2 do
3
4   ....
5
6 done

当command执行命令为真,就执行do中内容

until循环:

until循环逻辑与while相反,command为假就执行内容

1 until command
2
3 do
4
5   ......
6
7 done

跳出循环:

break后可以接数字,代表跳出到第几层循环。若不接数字,默认跳出到最大循环。若数字大于最大循环,则跳出最大循环。

continue代表直接进入下一次循环,和c/c++一样。

函数:

1 FunctionName()
2 {
3   .........
4 }

注意:

1、函数名括号中不能带有参数。

2、函数也有返回值,同样通过${?}取得

3、调用函数直接输入函数名,但后面不能跟括号

4、函数参数在函数名后输入,空格分隔各参数,${n}取第n个参数,从1开始

文件调用:

bash也可以包含其他shell文件,使用格式:

source File
或
. File(注意空格)

shell scripts 调试:

使用sh [-nvx] file.sh命令调试脚本

-n:不执行scripts,仅检查语法

-v:先将scripts内容输出到屏幕上,再执行

-x:将scripts执行过程中使用到的内容都输出到屏幕上

转载于:https://www.cnblogs.com/KcMeterCEC/p/5361681.html

Linux上层应用--Shell scripts基础规范相关推荐

  1. 基于Linux的bash/shell编程基础

    目录 第一章 shell入门 1.什么是shell 2.shell入门 3,变量的定义和使用 4.接收用户输入(重点) 5.条件判断语句 6.运算符 6.1.算数运算符 6.2.关系运算符 6.3.逻 ...

  2. Linux环境下Shell脚本基础篇-鸡兔同笼问题

    概述 鸡兔同笼,是古代著名典型趣题之一,记载于<孙子算经>之中,题目为"有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚.问笼中各有多少只鸡和兔?" ...

  3. 【分享】4412开发板-嵌入式Linux开发须要掌握的基础知识和技能

    本文转自迅为电子论坛:http://www.topeetboard.com 1.Linux 基础 安装Linux操作系统 Linux文件系统 Linux经常使用命令 Linux启动过程具体解释 熟悉L ...

  4. linux运维基础进阶和shell入门,Linux运维工程师从基础到进阶:Shell变量知识梳理...

    原标题:Linux运维工程师从基础到进阶:Shell变量知识梳理 Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言,涵盖的知识点多且杂 ...

  5. Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

  6. Linux Shell编程基础

    linux系统下给命令指定别名alias命令用法: 在linux系统中如果命令太长又不符合用户的习惯,那么我们可以为它指定一个别名.虽然可以为命令建立"链接"解决长文件名的问题,但 ...

  7. 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)...

    第10章 vim程序编辑器 可以将vim看做vi的进阶版本,vim可以用颜色或底线等方式来显示出一些特殊的信息. 为何要学习vim?因为: a. 所有的 Unix Like 系统都会内建 vi 文书编 ...

  8. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

  9. Linux shell脚本基础学习详细介绍(完整版)2

    详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...

  10. Linux shell脚本基础学习详细介绍(完整版)

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

最新文章

  1. Filter(过滤器)
  2. C++实现大数的乘法
  3. linux sort 排序命令简介
  4. textfile 属性
  5. IT技术能治病救人-数据是21世纪最伟大的药物
  6. nfine框架 上传文件_网站服务器Nginx运行环境,后台文件上传超出Nginx的最大值...
  7. mysql初体验学习笔记_【MySQL】mycli初体验
  8. Java高并发编程详解系列-线程安全数据同步
  9. Java类加载过程内存分析
  10. 【ElasticSearch】Es 源码之 DiskThresholdMonitor 源码解读
  11. mysql数据表中取几列_MySQL查询数据表中数据记录(包括多表查询)
  12. 仅为代码实际运行资源付费 解构国内首个函数计算
  13. SQLite学习笔记
  14. 台达伺服电机编码器改功率刷功率软件
  15. ISA防火墙简单安装配置实例
  16. Linux增加root目录容量,Linux(manjaro)增加根目录磁盘空间
  17. PDF文件压缩有什么方法?如何操作?
  18. 计算机access分数比例,[access查询]关于分数段统计问题
  19. POJ1753题解(枚举)
  20. 这100款APP违法违规,好几十款都在用!

热门文章

  1. SQL-SERVER触发器
  2. 【CentOS 7笔记43】,防火墙和iptables filter表#
  3. ping首包慢的问题(及icmp对应关系)
  4. python 基本数据类型
  5. python入门学习(五 字符串string和变量variable)
  6. 三大技术要素为互联网金融2.0保驾护航
  7. javascript中在链表中向前(向后)移动n个节点
  8. server2008R2WSUS管理之 计算机管理
  9. iOS开发之控制器之间传值
  10. Perl命令行应用介绍