Shell
Shell
学当以立德,百行当以德为首!
Shell概述
Shell工具
Shell在线编辑工具
Shell发展
Ken Thompson
的sh
是第一种Unix Shell
,Windows Explorer
(文件资源管理器)是一个图形化Shell
Shell风格
Shell
风格有图形化Shell
(GUI shell)、命令行shell
(Command Line Interface shell,CLI shell)
Shell概念
Shell
是一个用C语言
编写的程序,它是用户使用Linux
的桥梁,它既是一种命令语言,又是一种程序设计语言
Shell特点
访问操作系统内核的服务、提供文件名扩展字符即通配符(*、?、[])、无需创建新进程、允许灵活地使用数据流、模块化编程
Shell分类
Shell
分为Shell
和Shell脚本
(shell script),Shell
通常指Shell脚本
但Shell
和Shell
脚本两者却是不同
Shell环境
Shell
跟JavaScript
、PHP
编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了
Shell种类
Linux
的Shell
种类众多常见有:Bourne Shell
(/usr/bin/sh或/bin/sh)、Bourne Again Shell
(/bin/bash)
- Bourne Shell(/usr/bin/sh或/bin/sh)
- 一般不区分
Bourne Shell
和Bourne Again Shell
,所以#!/bin/sh
也可改为#!/bin/bash
#!
代表告诉系统其后路径所指定的程序即是解释此脚本文件的Shell
程序
- 一般不区分
- Bourne Again Shell
Bourne Again Shell
易用且免费被广泛使用,同时Bash
也是大多数Linux
系统默认的Shell
- Shell其它不常用种类
C Shell
(/usr/bin/csh)、K Shell
(/usr/bin/ksh)、Shell for Root
(/sbin/sh)、PowerShell
Shell编写
Shell后缀
Shell
扩展名为sh
Shell运行
Shell脚本
运行的两种方法:作为可执行程序、作为解释器参数
- 作为可执行程序
- 第一步编写
sh代码
并保存为xxx.sh
,再cd
进入到相应目录 - 第二步通过命令
chmod +x ./xxx.sh
,使脚本具有执行权限(一定要写成./xxx.sh
而不是xxx.sh
) - 第三步通过命令
./xxx.sh
,执行脚本
- 第一步编写
- 作为解释器参数
- 此方式是直接运行解释器,其参数是
shell
脚本文件,如:/bin/sh xxx.sh
,且无需在第一行指定解释器信息
- 此方式是直接运行解释器,其参数是
Shell变量
Shell变量概念
Shell变量
在定义时变量名不加美元符号($,PHP语言中变量需要),如:your_name="zhr"
- 注意,Shell的变量名和等号之间不能有空格
- 变量命名须遵循如下规则:
- 不能用标点符号
- 中间不能有空格,可使用下划线 _
- 不能用bash里的关键字(可用help命令查看保留关键字)
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
Shell变量调用
调用一个定义过的Shell
变量,只需在变量名前加美元符号即可,如:name="zhr"
echo $name
echo ${name}
- 变量名外的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,推荐给所有变量加上花括号
Shell变量刷新
若要刷新变量只需对已定义过的变量进行重新赋值即可
Shell只读变量
用readonly
命令可将变量定义为只读变量,只读变量的值不能被改变
Shell删除变量
用unset
命令可删除变量,语法:unset variable_name
,变量被删除后不能再使用且不能删只读变量
Shell变量类型
运行Shell
时会同时存在三种变量:局部变量、环境变量、Shell变量
- 局部变量
局部变量在脚本或命令中定义,仅在当前Shell实例
中有效,其他Shell
启动的程序不能访问局部变量 - 环境变量
环境变量能被所有程序(包括Shell启动的程序)访问,有些程序需要它来保证其正常运行,Shell脚本
也可定义它 - shell变量
Shell变量
是由Shell程序
设置的特殊变量,其中一部分是环境变量,一部分是局部变量,从而保证shell
的正常运行
Shell字符串
Shell字符串概念
Shell字符串
是编程中最常用且有用的数据类型,Shell字符串
可用单引号、双引号,也可以不用引号
- 双引号
- 双引号里可有变量和转义字符
- 单引号
- 单引号里的任何字符都会原样输出即单引号字符串中的变量无效
- 单引号字串中不能出现单独的单引号(对单引号使用转义符后也不行),但可成对出现作为字符串拼接使用
Shell字符串长度
Shell
字符串长度的获取需用#
,语法为${#变量名}
,若变量不是字符串而是数组时${#string}
等于${#string[0]}
Shell字符串提取
Shell字符串提取需用:
,语法为${变量名:初始位置:最终位置
},且第一个字符的索引值为0
Shell字符串查找
Shell字符串查找需用反引号,语法为expr index "$变量名" 要查找的字符
,哪个字符先出现就计算哪个字符的位置
- 实例
string="hello"
echo `expr index "$string" el` # 输出2,注意是反引号而不是单引号