shell脚本

什么是shell脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。业界所说的 shell 通常都是指 shell 脚本,shell 和 shell script 是两个不同的概念,Shell 是一个用 C 语言编写的应用程序,它是用户使用 Linux 的桥梁。
用shell编写的shell脚本,文件后缀名为.sh

执行shell脚本的两种方式

  • 作为可执行程序
#!/bin/bash
number=10;
echo $number;
image.png
  • 作为解释器参数


    image.png

Shell 变量

  • 定义变量
    定义变量时,变量名不加美元符号,变量名和等号之间不能有空格,其他命名规则与其他脚本语言类似
  • 使用变量
    使用一个定义过的变量,只要在变量名前面加美元符号即可
    -只读变量
    使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变,相当于是常量不允许修改
  • 删除变量
    使用 unset 命令可以删除变量 语法:unset variable_name
  • 变量类型
  1. 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  2. 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  3. shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
  • Shell 字符串
  1. 单引号
    单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的 引号字串中不能出现单引号(对单引号使用转义符后也不行)
  2. 双引号
    双引号里可以有变量 双引号里可以出现转义字符
  3. 拼接字符串
image.png
  • Shell 数组
    bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
    类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0
  1. 定义数组
    在Shell中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为 数组名=(值1 值2 ... 值n)
  2. 读取数组 读取数组元素值的一般格式是:${数组名[下标]}
  3. 获取数组的长度 获取数组长度的方法与获取字符串长度的方法相同


    image.png
  • Shell 注释
    以"#"开头的行就是注释,会被解释器忽略 备注:sh里面没有多行注释

Shell 基本运算符

Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用

  • 算术运算符
运算符 说明
+ 减法
- 减法
* 乘法
/ 除法
% 取余
= 赋值
== 相等。用于比较两个数字,相同则返回 true
!= 不相等。用于比较两个数字,不相同则返回 true
image.png
  • 关系运算符
运算符 说明
-eq 检测两个数是否相等,相等返回 true
-ne 检测两个数是否不相等,不相等返回 true
-gt 检测左边的数是否大于右边的,如果是,则返回 true
-lt 检测左边的数是否小于右边的,如果是,则返回 true
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true
-le 检测左边的数是否小于等于右边的,如果是,则返回 true
image.png
  • 逻辑运算符
运算符 说明
&& 逻辑的 AND
| | 逻辑的 OR
image.png
  • 字符串运算符
运算符 说明
= 检测两个字符串是否相等,相等返回 true
!= 检测两个字符串是否相等,不相等返回 true
-z 检测字符串长度是否为0,为0返回 true
-n 检测字符串长度是否为0,不为0返回 true
str 检测字符串是否为空,不为空返回 true

ehco和printf命令

image.png

Shell test 命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试

Shell 流程控制

  • if条件判断


    image.png
  • for循环


    image.png

    image.png
  • while循环


    image.png
  • until循环


    image.png
  • break跳出整个循环


    image.png
  • continue跳出当前循环继续下一次循环


    image.png

Shell 函数

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用
1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)


image.png

Shell 输入/输出重定向

  • /dev/null 文件
    如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335