Linux上层应用--Shell scripts基础规范
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基础规范相关推荐
- 基于Linux的bash/shell编程基础
目录 第一章 shell入门 1.什么是shell 2.shell入门 3,变量的定义和使用 4.接收用户输入(重点) 5.条件判断语句 6.运算符 6.1.算数运算符 6.2.关系运算符 6.3.逻 ...
- Linux环境下Shell脚本基础篇-鸡兔同笼问题
概述 鸡兔同笼,是古代著名典型趣题之一,记载于<孙子算经>之中,题目为"有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚.问笼中各有多少只鸡和兔?" ...
- 【分享】4412开发板-嵌入式Linux开发须要掌握的基础知识和技能
本文转自迅为电子论坛:http://www.topeetboard.com 1.Linux 基础 安装Linux操作系统 Linux文件系统 Linux经常使用命令 Linux启动过程具体解释 熟悉L ...
- linux运维基础进阶和shell入门,Linux运维工程师从基础到进阶:Shell变量知识梳理...
原标题:Linux运维工程师从基础到进阶:Shell变量知识梳理 Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言,涵盖的知识点多且杂 ...
- Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...
- Linux Shell编程基础
linux系统下给命令指定别名alias命令用法: 在linux系统中如果命令太长又不符合用户的习惯,那么我们可以为它指定一个别名.虽然可以为命令建立"链接"解决长文件名的问题,但 ...
- 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)...
第10章 vim程序编辑器 可以将vim看做vi的进阶版本,vim可以用颜色或底线等方式来显示出一些特殊的信息. 为何要学习vim?因为: a. 所有的 Unix Like 系统都会内建 vi 文书编 ...
- Linux shell脚本基础学习详细介绍(完整版)一
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...
- Linux shell脚本基础学习详细介绍(完整版)2
详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...
- Linux shell脚本基础学习详细介绍(完整版)
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...
最新文章
- Filter(过滤器)
- C++实现大数的乘法
- linux sort 排序命令简介
- textfile 属性
- IT技术能治病救人-数据是21世纪最伟大的药物
- nfine框架 上传文件_网站服务器Nginx运行环境,后台文件上传超出Nginx的最大值...
- mysql初体验学习笔记_【MySQL】mycli初体验
- Java高并发编程详解系列-线程安全数据同步
- Java类加载过程内存分析
- 【ElasticSearch】Es 源码之 DiskThresholdMonitor 源码解读
- mysql数据表中取几列_MySQL查询数据表中数据记录(包括多表查询)
- 仅为代码实际运行资源付费 解构国内首个函数计算
- SQLite学习笔记
- 台达伺服电机编码器改功率刷功率软件
- ISA防火墙简单安装配置实例
- Linux增加root目录容量,Linux(manjaro)增加根目录磁盘空间
- PDF文件压缩有什么方法?如何操作?
- 计算机access分数比例,[access查询]关于分数段统计问题
- POJ1753题解(枚举)
- 这100款APP违法违规,好几十款都在用!