目录
- 初识shell
- shell变量
- 定义变量
- 使用变量
- 只读变量
- 删除变量
- 变量类型
- 字符串变量
- 整数变量
- 数组变量
- 环境变量
- shell字符串
- 单引号和双引号
- 拼接字符串
- 获取字符串长度
- 提取字符串
- 查找字符串
- shell数组
- 定义数组
- 读取数组
- 获取数组长度
初识shell
Linux的Shell脚本种类很多,主要学习bash也就是Bourne Again Shell
我打开别人写的shell脚本第一行总会有一个 #!/bin/bash,刚开始我并不知道这是什么意思,感觉并没有什么作用,现在才知道,这是shell脚本的种类标识。
- 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)
- ……
执行shell脚本很简单,假设是test.sh的脚本执行它的话直接./test.sh就行了,但是有时候会出现这种情况:
原来是没有让这个脚本具有执行权限,这时候就需要输入:
chmod +x ./test.sh #使脚本具有执行权限
还有一种方式运行shell脚本,那就是sh test.sh
这种应该等于/bin/bash test.sh吧,不知道对不对哈
shell变量
定义变量
定义一个变量a为张三
a="张三"
这里主要注意的就是:
- 等于左右不要有空格!
- 变量名可以用数字、字母和下划线,但不能用数字开头
- 避免shell关键字,例如if、then、else、fi、for、whitle等
- 一般用大写字母标识常量
- 避免特殊符号,例如$
使用变量
现在定义了变量名,如何使用呢?那就是前面加个$就行了
echo $a 或者 echo ${a}
这样就会输出zhangsan了
只读变量
变量还有一种叫只读变量,使用readonly命令就可以将变量定义为只读变量
#!/bin/bash
myname="abcdef"
readonly myname
定义为只读变量之后如果后面再进行修改该变量,就会报错
/bin/sh: NAME: This variable is read only.
删除变量
使用unset命令就可以删除变量
unset myname
当然咯,已经被删除的变量就不能使用了。unset命令也不能删除只读变量
变量类型
字符串变量
使用单引号或者双引号来定义的变量
my_string="hello world!"
整数变量
可以使用declare或者typeset来声明变量并设置属性
这样的变量只包含整数,这里的-i就是生命为整数
declare -i my_integer=18
选项 | 描述 |
-a | 声明变量为数组 |
-A | 声明变量为关联数组(键值对) |
-f | 显示函数定义 |
-F | 显示函数名,但不显式定义 |
-i | 声明变量为整数类型 |
-p | 显式指定变量的声明信息 |
-r | 声明变量为只读 |
-t | 声明变量为跟踪变量(在脚本中跟踪变量的值) |
-x | 将变量导出为环境变量 |
-u | 声明变量的值为大写 |
-l | 声明变量的值为小写 |
数组变量
shell也支持数组变量,就是在一个变量中存储多个值
my_array=(1 2 3 4 5 6)
或者关联数组
declare -A my_array
my_array["name"]="zhangsan"
my_array["age"]=18
环境变量
这些是操作系统或者用户设置的特殊变量,例如
echo %PATH
shell字符串
单引号和双引号
单引号和双引号都可以定义字符串,但是单引号里面的任何字符都回原样输出,并且单引号中不能出现单独的单引号
str='this is string'
双引号中可以包含变量,也可以出现转义字符
拼接字符串
name="祖国"
str="我是"$name"的花朵,我爱我的"$name
echo $str
获取字符串长度
string="abcdefg"
echo ${#string} # 输出7
echo ${#string[0]} # 输出7
提取字符串
string="hello everyone i am happy"
echo ${string:2:6} # 输出 llo ev
即为从下标为2的索引开始截取,截取长度为6,注意第一个字符的索引值为0
查找字符串
查找字符i或者o的位置,哪个字母先出就计算哪个
string="hello everyone i am happy"
echo `expr index "$string" l` # 输出 3
shell数组
定义数组
bash支持一维数组,不限定数组大小
数组名=(值1 值2 值3 …… 值n)
也可以单独定义数组的各个分量:
array[0]=value0
array[1]=value1
……
读取数组
${数组名[下标]}
使用@符号可以获取数组中所有的元素
array=(1 2 3 4 5 6)
echo ${array[2]} # 输出3
echo ${array[@]} # 输出1 2 3 4 5 6
获取数组长度
# 取得数组元素的个数
length=${#array[@]}
# 或者
length=${#array[*]}
# 取得数组单个元素的长度
length=${#array[n]}