文章目录
- Shell编程文档整理
- 一、Shell介绍
- 1.1 简介
- 1.2 Shell解释器
- 二、快速入门
- 2.1 编写Shell脚本
- 2.1.1 创建脚本示例
- 2.1.2 赋予执行权限
- 2.2 执行Shell脚本
- 三、Shell程序:变量
- 3.1 语法格式
- 3.2 变量使用
- 3.3 变量类型
- 四、字符串
- 4.1 单引号
- 4.2 双引号
- 4.3 获取字符串长度
- 4.4 提取子字符串
- 4.5 查找子字符串
- 五、Shell程序:参数传递
- 5.1 参数传递方式
- 5.2 特殊字符
- 5.3 `$*` 和 `$@` 的区别
- 六、Shell程序:运算符
- 6.1 算术运算符
- 6.1.1 **通过`( ( ) )`,`$[ ]`进行算术运算**
- 6.2 关系运算符
- 6.3 逻辑运算符
- 6.4 字符串运算符
- 6.5 文件测试运算符
Shell编程文档整理
一、Shell介绍
1.1 简介
Shell 是一个用 C语言编写的程序,通过 Shell 用户可以访问操作系统内核服务。
Shell类似于 DOS 下的 command 和后来的 cmd.exe。
Shell既是一种命令语言,又是一种程序设计语言。
Shell script 是一种为 shell 编写的脚本程序。
Shell 编程一般指 shell 脚本编程,不是指开发 shell 自身。
1.2 Shell解释器
Shell 编程跟传统的编程语言一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 解释器种类众多,一个系统可以存在多个 shell,可以通过 cat /etc/shells 命令查看系统中安装的 shell。
bash 由于易用和免费,在日常工作中被广泛使用。同时,bash 也是大多数 Linux 系统默认的 Shell。
二、快速入门
2.1 编写Shell脚本
使用vi编辑器新建一个文件hello.sh(扩展名并不影响脚本执行)
#!/bin/bash
echo "Hello World !"
#!
是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shellecho
命令用于向窗口输出文本
2.1.1 创建脚本示例
mkdir shelldemo
cd shelldemo
vi hello.sh
内容:
#!/bin/bash
echo "Hello World!"
2.1.2 赋予执行权限
chmod +x ./hello.sh
2.2 执行Shell脚本
执行方式:
./hello.sh
:在当前目录执行/xx/xxx.sh
:书写全路径执行sh /xx/xxx.sh
:作为解释器参数执行(无需执行权限)source xxx.dh
:可以没有执行权限
三、Shell程序:变量
3.1 语法格式
变量名=值
命名规则:
- 等号两边不能有空格
- 首个字符必须为字母(a-z,A-Z)
- 中间不能有空格,可以使用下划线(_)
- 不能使用标点符号
- 不能使用 bash 里的关键字
3.2 变量使用
your_name="bigdata.com"
echo $your_name
echo ${your_name}
- 花括号可选,用于帮助解释器识别变量边界
- 变量可重新定义
readonly
定义只读变量unset
删除变量(不能删除只读变量)
3.3 变量类型
-
局部变量:仅在当前 shell 实例中有效
-
全局变量(环境变量):所有程序都可访问
四、字符串
字符串是shell编程中最常用最有用的数据类型,字符串可以单引号,也可以用双引号,也可以不用引号
4.1 单引号
实例:
skill='linux'
str='I am goot at $skill' # 变量无效
echo $str #输出
输出结果: I am goot at $skill
单引号字符串限制:
· 单引号里任何数字字符都会原样输出,单引号字符串中的变量是无效的;
· 单引号字串中不能出现单独一个单引号,但可以成对出现,作为字符串拼接使用。
4.2 双引号
示例:
skill='linux'
str="I am goot at $skill" # 变量有效
输出结果: i am goot at linux
4.3 获取字符串长度
skill='hadoop'
echo ${#skill} # 输出6
4.4 提取子字符串
str="I am goot at hadoop"
echo ${str:2} # 输出:am goot at hadoop
echo ${str:2:2} # 输出:am
4.5 查找子字符串
str="I am goot at hadoop"
echo `expr index "$str" am` # 输出3
五、Shell程序:参数传递
5.1 参数传递方式
./shell程序 参数1 参数2 ...
脚本内获取参数:
$0
:脚本名称$1
、$2
…:第1、2个参数
执行结果
5.2 特殊字符
符号 | 含义 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 显示脚本运行的当前进程ID号 |
$! | 最后一个后台进程ID |
$@ | 所有参数作为列表 |
$? | 上一条命令退出状态,显示0则表示没有错误 |
$?:判断上一条命令是否正确,若输出为“0”则表示执行成功,非“0”则执行失败
5.3 $*
和 $@
的区别
- 不加引号时相同
- 加引号时:
"$*"
:所有参数作为一个字符串"$@"
:每个参数作为独立字符串
六、Shell程序:运算符
6.1 算术运算符
Shell和其他编程语言一样,支持包括:算术、关系、逻辑、字符串等运算
符。
原生 /bin/bash 不支持简单的数学运算,但是可以通过其他命令来实现,
例如: expr
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
使用 expr
、$(())
、$[]
val=`expr 2 + 2` #此处需要用反引号,且”2 + 2“之间需要空格
val=$((1+1))
val=$[1+2]
附加内容:read命令
·read -p 提示用户显示
·read -n 第一字符数
6.1.1 通过( ( ) )
,$[ ]
进行算术运算
案例1、通过(())
进行算术运算
案例2 通过“$[ ]"进行运算
6.2 关系运算符
运算符 | 含义 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-lt | 小于 |
-gt | 大于 |
-le | 小于等于 |
-ge | 大于等于 |
6.3 逻辑运算符
-a
:双方都成立(and)表达式1 -a表达式2-o
:单方成立(or)表达式1 -0 表达式2&&
、||
:用于 echo 或条件判断
6.4 字符串运算符
运算符 | 含义 |
---|---|
-n | 非空字符串 |
-z | 空字符串 |
= | 判断两个字符串是否一样 |
!= | 判断两个字符串是否不相等 |
6.5 文件测试运算符
运算符 | 含义 |
---|---|
-f | 存在且是普通文件 |
-d | 存在且是目录 |
-s | 非空文件 |
-e | 文件存在 |
-r | 可读 |
-w | 可写 |
-x | 可执行 |