简单记录下shell脚本语言的学习。
shell脚本运行方式
首先要了解什么是脚本,脚本本质上是一个可运行的文件,使用特定格式的指令让系统通过脚本解析器解析并执行你的指令。系统提供的shell命令解析器有sh、bash和ash。可以通过echo $SHELL
查看自己linux系统的默认解析方式
shell脚本文件的开头:#!/bin/bash
#! 是特殊的用来声明脚本由什么shell解释,否则使用默认shell
sh文件有三种执行方式./xxx.sh
bash xxx.sh
. xxx.sh
./xxx.sh
先按照 文件中#!指定的解析器解析,如果#!指定指定的解析器不存在才会使用系统默认的解析器
bash xxx.sh
指明先用bash解析器解析,如果bash不存在才会使用默认解析器
. xxx.sh
直接使用默认解析器解析
各种引号的区别
vim创建脚本文件1111.sh:
1 | !/bin/bash |
变量名不能以数字开头
在变量赋值的过程中,等号两边不能接空格,若要接空格,则整个字符串都要用引号括起来
各种引号区别
双引号“”可以解析变量的值
单引号‘’不能解析变量的值,包含的变量会被当做字符串
反引号`` 反引号的内容作为系统命令并执行 如`date`
各种括号的区别
vim创建脚本文件xxx.sh:
1 | !/bin/bash |
vim创建脚本文件xxxx.sh:
1 | !/bin/bash |
{命令序列} 在当前shell中执行,直接影响当前变量
(命令序列) 由子shell完成,不影响当前shell的变量
[判断条件]中括号是判断条件,进行数值判断。下面会说明
数值判断
vim建立脚本文件xxxxx.sh:
1 | !/bin/bash |
数值判断参数详解
-eq 比较两个参数是否相等
-ne 比较两个参数是否不相等
-lt 左边参数是否小于右边参数
-le 左边参数是否小于等于右边参数
-gt 左边参数是否大于右边参数
-ge 左边参数是否大于等于右边参数
字符串提取和替换
vim新建脚本文件1234.sh:
1 | !/bin/bash |
字符串匹配和删除
vim新建脚本文件match.sh:
1 | !/bin/bash |
*号是通配符,可以是匹配的任意长度任意字符串
%和%%匹配原则:都是从右到左匹配,删除右边,%%称为贪婪匹配
#和##匹配原则:都是从左往右匹配,删除左边,##同样称为贪婪匹配,注意通配符位置
for循环语句
for循环语句两种写法如下:
1 | for ((初始值;限制值;执行步阶)) #注意两个小括号,少一个都不行 |
vim建立脚本文件for_example.sh:
1 | !/bin/bash |
自定义函数
vim建立脚本文件12345.sh:
1 | !/bin/bash |
自定义了一个formax函数判断输入的两个数值大小,可以看出shell脚本中是一行一行读取指令的。自定义函数可以被引用,保存上述{}内的指令至原文件名12345.sh,在下一个脚本文件中,将函数放在脚本开始处, shell解释器发现它才可以进行调用(如下所示)
vim建立脚本文件test.sh:
1 | !/bin/bash |
自定义函数被成功调用