sh脚本学习
Last updated on a day ago
什么是 sh 脚本
sh 脚本就是 Shell,简单来说可以自动进行命令行的操作
环境配置
只需要有文本编辑器和解释器就可以了,linux 常见的有
Bourne Shell(/usr/bin/sh 或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh
这里讲的是 Bash
helloworld
1 |
|
#!
标记会告诉系统使用什么解释器来执行#
表示注释,后面的内容都会被解释器忽略echo "hello world"
表示输出文本
执行脚本
首先需要让文件有被执行的权限,在命令行输入以下命令
1 |
|
然后就可以执行脚本了
1 |
|
如果想指定解释器,还可以将脚本作为解释器参数
1 |
|
这种写法会忽略第一行的解释器指定
变量
声明变量
shell 声明变量类似 python,直接变量名+赋值就好了
1 |
|
注意,等号前后不能有空格,等号两侧出现空格可能会导致错误
使用变量
在使用变量时,只需在变量名前加$
就可以了
1 |
|
如上,其中{}
花括号用于帮助解释器识别变量的边界,比如下面这种写法
1 |
|
$hellohello
会被认为是使用了一个名为hellohello
的变量(其值为空),${hello}hello
则会打印出“worldhello”
只读变量
可以使用readonly
命令将变量定义为只读,其值不能被改变
使用时慎重,这个操作不可逆
1 |
|
也可以在声明的时候定义
1 |
|
删除变量
使用unset
命令可以删除变量,但不能删除只读变量
1 |
|
变量类型
和其他语言一样,shell 也有变量类型
- 字符串类型
默认情况下,变量通常被视为字符串,比如
1 |
|
上面的代码虽然看着是赋值了一个整形,但其实是会作为字符串解释的,所以 b 的值是“1+1”
也可以使用单引号或双引号定义字符串
- 整数
可以使用declare
或typeset
(在 bash 中typeset
是declare
的别名,用法一致)命令来定义整数变量,但这是不一定的,有些 shell 并不是用这两个命令,所以开头指定解释器很重要
1 |
|
- 数组
数组可以分为索引数组和关联数组,其实两者的区别只是键值对的区别而已,索引数组使用下标作为键,关联数组使用字符串作为键
1 |
|
想要调用数组需要用{}
将变量名+索引括起来
1 |
|
还可以使用!
和*
,获取索引或所有值
1 |
|
- 环境变量
环境变量由用户或系统设置的特殊变量,比如PATH
1 |
|
可以使用 export 查看环境变量,会有类似下面的返回值
1 |
|
-x
表示变量为环境变量
1 |
|
- 特殊变量
有一些特殊变量在 Shell 具有特殊含义,例如$0
表示脚本的名称,$1
,$2
, 等表示脚本的参数。
$#
表示传递给脚本的参数数量,$?
表示上一个命令的退出状态等。
Shell 字符串
单双引号区别
单引号和双引号都可以用来表示字符串(甚至可以不用引号),但两者还是有些区别
- 单引号
- 无视变量,所有内容都会原样输出
- 单引号字符串中不能出现单独一个单引号(用转义符也不行),但可以成对出现,作为
1 |
|
- 双引号
- 双引号内可以有变量
- 双引号内可以有转义字符
1 |
|
字符串长度
1 |
|
#
用于获取元素的长度,可以指定索引。对于字符串而言str
就是str[0]
,可以`$