环境
系统: Centos7
版本: GUN bash, version4.2.46
学习过程
第一个shell脚本
1 | #!是一个约定的标记, 会告诉系统该脚本需要的解释器, 即哪一种shell |
运行Shell脚本
可执行程序
运行二进制程序, 直接写shell.sh
, linux系统会找不到, linux系统会去PATH里寻找, 一般只有/bin, /sbin, /usr/bin, /usr/sbin等在PATH里, 要用./提示在当前目录找.
1 | 使脚本具有执行权限 |
利用解释器参数
1 | /bin/sh shell.sh |
Shell变量
定义变量时, 变量名前不加美元符号.
命名只能使用英文字母, 数字和下划线, 首个字符不能以数字开头
中间不能有空格, 可以使用下划线_
不能使用标点符号
不能使用bash里的关键字(利用–help保留关键字)
利用语句给变量赋值.
1 | 将/etc下目录的文件名循环出来 |
使用变量
1 | 使用一个定义过的变量, 只要在变量名前面加美元符号 |
只读变量
1 | myRead="order" |
删除变量
1 | 使用unset命令可以删除变量 |
变量类型
局部变量: 该变量在脚本或命令中定义, 仅在当前shell实例中有效, 其他shell中不能访问局部变量
环境变量: 所有的程序, 包括shell启动的程序, 都能访问环境变量, 有些程序需要环境变量来保证其正常运行
shell变量: shell变量是由shell程序设置的特殊变量, 该变量保证了shell的正常运行
Shell字符串
单引号
单引号里的任何字符都会原样输出, 单引号字符串中的变量是无效的
单引号字串中不能出现单独的一个的单引号(也不能对单引号进行转义), 但可以成对出现, 作为字符串拼接使用
1 | str='this is a single quote' |
双引号
双引号里可以有变量
双引号里可以出现转义字符
1 | var='double' |
拼接字符串
1 | var="wiidu" |
获取字符串长度
1 | string="length" |
提取子字符串
1 | string="wiidu is my bolg" |
查找子字符串
1 | string="wiidu is my blog" |
Shell数组
bash支持一维数组, 不支持多维数组, 且没有限定数组的大小, 数组的下标类似于C语言.
定义数组
1 | 用括号来表示数组, 数组元素用空格符号分割 |
读取数组
1 | 读取数组元素值的格式 |
获取数组的长度
1 | 获取数组元素的个数 |
Shell注释
单行注释: #
多行注释: 可以将要注释的代码用一对花括号括起来, 定义为一个函数, 没有调用, 就相当于注释
1 | 多行注释 |
Shell传递参数
在执行Shell脚本时, 向脚本传递参数, 脚本内获取参数的格式为: $n. n代表一个数字, 1为执行脚本的第一个参数, 2为执行脚本的第二个参数, 依次类推.
1 | 传递三个参数, 并分别输出 |
参数 | 功能 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
[email protected] | 与$*相同,但是使用时加引号,并在引号中返回每个参数 |
$- | 显示Shell使用的当前选项 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误 |
在为Shell脚本传递的参数中如果有空格, 应该使用单引号或着双引号将该参数括起来, 以便于脚本将这个参数作为整体来接受.在有参数时, 可以使用对参数进行校验的方式处理已减少错误发生
.