shell-script的学习和使用
注意事项
- 指令的执行是从上而下、从左到右;
- 指令、选项、参数间的多个空白都会被忽略;
- 空白行也会被忽略,Tab空白也视为空白行;
- 如果读取到一个Enter(CR)符号,就开始执行该行命令;
- 如果一行的内容太多,可以使用
\Enter
来延伸到下一行; #
是注释符号,该符号后面的数据全部被视为注释文字;- 脚本需要有
rx
权限才能被执行,脚本的执行可通过绝对路径、相对路径、变量PATH
实现,除此之外,还可以通过bash程序来执行bash script.sh
orsh script.sh
; - 主文件夹下的
~/bin
目录默认被设置到${PATH}
中,也可以将脚本存放到~/bin
下,直接输入script.sh
执行脚本;
基础
- 脚本第一行声明脚本使用的shell名称,声明的方式是
#!/bin/bash
;- 声明的符号注意与注释符号
#
区分;
- 声明的符号注意与注释符号
- 在脚本中强烈建议加注内容与功能、版本信息、作者与联络方式、创建日期、历史记录等信息
- 主环境变量的声明
PATH=${PATH}
,并全局生效export PATH
; - 执行结果可以使用变量
$?
来观察,我们可以使用exit
指令让程序中断,并回传一个数值给系统,$?=0
表示指令成功执行; - 数值的运算格式
$((x运算符))
可使用的运算符有+ - * / %
test指令
- test指令常用的选项
-e
该文件是否存在-f
该文件是否存在并且为文件-d
该文件是否存在并且为目录-z
判断字符串是否为0,若为空字符,则为true!
反状态-rwx
文件权限的判断-s
文件名是否存在并且为非空白文件-a
条件and-o
条件or-eq
相等-ne
不相等-gt
大于-lt
小于-qe
大于等于-le
小于等于
判断符号[]
- 除了使用test指令判断外,还可以使用符号
[]
来进行判断,使用符号判断,需要注意以下几点:- 在符号内的每个元素都需要使用空白格分割;
- 在符号内的变量,最好都使用双引号括起来;
- 在符号内的常数,最好使用单引号或双引号括起来;
- 命令格式:
[ "变量1" == "变量2" ]
,多个条件的可以使用-a -o
连接
脚本的默认变量
$#
脚本的参数个数$@
脚本的全部参数${n}
n代表数字,第几个参数${0}
代表脚本程序名- 脚本变量的偏移使用命令
shift
,在命令符后可接数字,代表偏移的数量
条件判断
if…then单层判断命令格式s
1
2
3if [条件判断]; then
command
fiif…then多层判断命令格式
1
2
3
4
5
6
7if [条件判断1]; then
command1
elif [条件判断1]; then
command2
else
command3
fi
case ..esac判断
- 用于多个既定变量内容的判断,命令格式:
1
2
3
4
5
6
7
8
9
10
11case ${变量} in
"内容1")
command1
;;
"内容2")
command2
;;
*)
command3
;;
esac
function功能
- 使用function可以创建函数,创建的函数需要在脚本的最前面,函数的格式:
1
2
3function fname (){
command
}
循环loop功能
不定循环while..do..done当条件成立时,执行循环,当条件不成立时,停止循环。命令格式:
1
2
3
4while [ 条件 ] # 中括号内是判断式
do # 开始循环
command
done # 结束循环不定循环until..do..done当条件成立时,终止循环,否则就持续进入循环。命令格式:
1
2
3
4until [ 条件 ]
do
command
done固定循环for..do..done,已经知道循环几次。命令格式:
1
2
3
4for var in con1 con2 con3
do
command
done固定循环for的另一种格式:
1
2
3
4for ( ( 初始值; 限制值; 执行步阶 ) )
do
command
done使用循环和function功能测试局域网内存活的主机ip地址
sh的debug
- 命令格式
sh [-nvx] shell.sh
-n
不执行脚本,仅检查语法-v
在执行脚本前,先将脚本的内容输出到屏幕中-x
将使用到的脚本内容显示到屏幕上