Shell脚本学习总结变量篇
1.什么是Shell?
shell 是一个用 C 语言编写的程序, 它是用户使用 Linux 的桥梁, Shell 既是一种命令语言, 又是一种程序设计语言.
2.Shell环境
Shell 编程和JavaScript、php编程一样, 只要有一个能编写代码的文本编辑器和一个能执行的脚本解释器就行了.
Linux 中常见的 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)
一般情况下,并不会区分 Bourne Shell 和 Bourne Again Shell, 所以#!/bin/sh也可以写成#!/bin/bash.
注: #! 告诉系统其后所指定的程序就是解释此脚本文件的 Shell 程序.
3.运行 Shell 脚本的方法
- 作为可执行程序
在脚本所在目录下, 通过 chmod +x ./脚本名的方式,可以给脚本文件添加可执行权限,获取可执行权限后执行 ./脚本名即可执行 Shell 脚本. - 作为解释器参数
这种方式是指直接运行解释器, 其参数就是Shell脚本的文件名:如:
/bin/sh test.sh(test.sh自己指定脚本名进行替换)
/bin/php test.sh(同上)
注:以这种方式运行脚本,无需在脚本文件第一行指定解释器信息,指定了也无用.
4.Shell 变量
4.1.定义变量
变量的命名规则:
- 命名只能使用英文字母, 数字和下划线, 首个字符不能以数字开头.
- 中间不能有空格, 可以使用下划线(_).
- 不能使用标点符号.
- 不能使用bash里的关键字(使用help命令可以查看保留的关键字).
定义一个合法变量如下:
city_name="西安" #显示地直接赋值
for file in `ls /etc` #用语句给变量赋值
or
for file in ${ls /etc}
注意: 变量名和等号之间不能有空格.
4.2.使用变量
使用已经定义过的变量,只要在变量前加美元符即可, 如:
city_name="西安"
echo $city_name
echo ${city_name}
如上实例中的花括号是可选的, 加花括号是为了帮助解释器识别变量的边界.
一个好的编程习惯:给所有被使用的变量加上花括号.
已经定义的变量可以进行二次赋值, 需要注意的是二次赋值时作为左值的变量无需加美元符.
4.3.删除变量
可以使用unset命令删除变量, 语法如下:
unset city_name
注意:变量删除后就不能再次使用, unset不能删除只读变量.
上面提到的只读变量,即用 readonly修饰的变量,语法如下:
readonly city_name
此时的city_name就是一个只读变量.
5.Shell字符串
字符串可以用单引号,也可以用双引号,也可以不用引号.
5.1.单引号
str='this is a string'
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字符串中不能出现单独一个的单引号(转义的单引号亦不可以), 但可成对出现,作为字符串拼接使用
5.2.双引号
city_name='西安'
str="Your favourite city is \"${city_name}\" ! \n"
echo -e ${str}
输出结果为:
Your favourite city is "西安" !
双引号:
- 双引号里可以有变量
- 双引号里可以出现转义字符
5.3.获取字符串长度
string="abcd"
echo ${#string} #输出 4
5.4.提取子字符串
需求:从字符串第2个字符开始截取4个字符:
string="Hello World!"
echo ${string:1:4} #输出 ello
5.5.查找子字符串
需求:查找字符o或r的位置(谁先出现,就计算谁的下标)
string="Hello World!"
echo `expr index "$string" or` # 输出5
注意:上面的`是反引号,不是单引号’
5.6.字符串拼接
city_name="西安"
# 使用双引号拼接
greeting_1="Hello, "$city_name" !"
greeting_2="Hello, ${city_name} !"
echo $greeting_1 $greeting_2
# 使用单引号拼接
greeting_3="Hello, '$city_name' !"
greeting_4="Hello, ${city_name}"
echo $greeting_3 $greeting_4
输出结果:
Hello, 西安 ! Hello, 西安 !
Hello, 西安 ! Hello, ${city_name} !
6.Shell数组
6.1.定义数组
bash仅支持一维数组,数组元素的获取要通过下标,下标可以是整数或算术表达式.
数组用括号来表示,数组元素用"空格"符号分割开.其语法如下:
数组名=(值1 值2 … 值n)
例:
cities_name=("北京" "西安" "上海")
or
cities_name=(
"北京"
"西安"
"上海"
)
or
cities_name[0]=value0
cities_name[1]=value1
cities_name[n]=valuen
6.2.读取数组
读取数组的语法格式如下:
${数组名[下标]}
列如:
value=${cities_name[n]}
使用@符号作为下标时,可以获取数组中所有的元素, 列如:
echo ${cities_name[@]}
6.2.获取数组长度
获取数组长度的语法如下:
# 获取数组元素个数
length=${#cities_name[@]}
# 或者
length=${#cities_name[*]}
# 获取单个数组元素的长度
lengthn=${#cities_name[n]}