shell脚本学习笔记
2019-05-20 本文已影响0人
愤愤的有痣青年
shell 脚本是一种可以在linux系统下运行的解释性脚本,应用广泛,功能强大,以下是本人在学习shell脚本过程中的学习笔记.
shell 脚本一般第一行为
#!/bin/bash
或#!/bin/sh
,这是用来指定运行的解释器程序的路径
第一个脚本
#!/bin/bash
echo "hello shell"
- 脚本名称为test.sh,其运行方式有两种,一种是赋予可执行权限后使用
./test.sh
运行,另一种是手动指定运行的解释器来运行,例如/bin/bash test.sh
脚本语法
变量
-
定义变量时,变量名不加美元符号,同时变量名和等号之间不能有空格
例:name="panso"
-
使用变量时,需要在变量前面加上{name}`
-
只读变量,使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
例:
myUrl="http://www.google.com"
readonly myUrl
- 删除变量, 删除后的变量不可再读
例:unset name
Shell 字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号.
-
单引号, 单引号用于原样输出字符串内容,内部变量将不会生效, 内部也不可出现单引号,即使转义的也不行
例:str='this is a string'
-
双引号,内部可以有变量和转义符号
例:str="my name is ${name}"
-
拼接字符串
your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
输出:
hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !
获取字符串长度
string="abcd"
echo ${#string} #输出 4
提取子字符串
- 以下实例从字符串第 2 个字符开始截取 4 个字符:
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo
查找子字符串
- 查找字符 i 或 o 的位置,用到了expr命令(哪个字母先出现就计算哪个)
string="runoob is a great site"
echo `expr index "$string" io` # 输出 4
shell 数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。数组元素下标从0开始
- 数组定义, 在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
数组名=(值1 值2 ... 值n)
例:
array_name=(value0 value1 value2 value3)
或:
array_name=(
value0
value1
value2
value3
)
或(可以不使用连续的下标,而且下标的范围没有限制。):
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
读取数组
-
读取数组元素值的一般格式是
${数组名[数组下标]}
例:valuen=${array_name[n]}
-
使用 @ 符号可以获取数组中的所有元素,例如:
echo ${array_name[@]}
获取数组的长度
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
Shell 接收传递的参数
- 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
# 脚本内部代码
echo "name is $0"
# 带参数运行脚本
./test.sh panso
# 输出
name is panso
- 另外,还有几个特殊字符用来处理参数:
参数处理 | 说明 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。如"1 n"的形式输出所有参数。 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与@"用「"」括起来的情况、以"2" … "$n" 的形式输出所有参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |