一,通用shell
linux中的通用shell为bash shell。
二,工作目标
1.批处理文件
2.初始化操作
3.进程自动化管理
4.网络端口自动化管理
三,语法
0.指定解释器
#!/bin/bash
注释
#
1.变量
全局变量
四,语法
全局变量
系统的全局变量全是大写,自己定义的可以是小写但不建议
export VAR=xxx
#一般放在.bashrc 文件中 作长久化处理
查找已定义的全局变量
export
env
局部变量
var="hello world"
数组
array=(1 2 3 4 5 6)
或者
array[1]=“hello”
array[2]="world"
#数组开始从1开始
删除变量
unset var
显示所有的变量(全局+局部+函数)
set
变量的有效范围
父进程export的变量可以进入子进程。
2.读变量
1.读通常的变量
$var 或者 ${var}
2.读数组
${array[1]}
3.命令
var = $(date)
3.数值变量
var=$((13/2)) #只能是整数
或者
var=$[1 + 5] #expr命令的简化
#bc命令用于数值计算 包括浮点数
重定向输入和输出
命令结果输入文件
cmd arg > file
&2> #输入错误到文件里
&> #不管错误还是命令输出内容到文件里
cmd arg >>file #追加
文件内容充当命令参数
cmd < file
内联输入重定向
cmd << EOF
< asdsad
<sadasdasd
<EOF #从这停在
#跟文件内容充当命令参数差不多 只不过文件是现写的
管道
cmd1 | cmd2
#cmd1的结果传输到cmd2的参数
查找命令退出的状态码
date
echo $?
$?的一些相关的信息
0 命令成功结束
1 一般性未知错误
2 不合适的shell命令
126 命令不可执行
127 没找到命令
128 无效的退出参数
128+x 与linux信号x相关的严重错误
130 通过Ctrl + C终止的命令
255 正常范围之外的退出状态码
脚本文件执行后产生的状态码是最后一个命令的执行完后的状态码
判断
if condition-command
then
command
elif condition-command
then
command
else
command
fi
比较
if [condition] #简化test命令
then
数值比较
[ a -eq b ] a==b
[ a -ge b ] a>=b
[ a -gt b ] a>b
[ a -le b ] a<=b
[ a -lt b ] a<b
[ a -ne b ] a!=b
字符串比较
[ str1 = str2 ]
[ str1 != str2 ]
[ str1 < str2 ]
[ str1 > str2 ]
[ -n str ] 检查str长度是否非0
[ -z str ] 检查str长度是否为0
文件比较
[ -d file ] file是否存在并且为目录
[ -e file ] file是否存在
[ -f file ] file是否存在并是一个文件
[ -r file ] file 是否存在并可读
[ -s file ] file 是否存在并非空
[ -w file ] file 是否存在并可写
[ -x file ] file 是否存在并可执行
[ -O file ] file是否存在并属于当前用户
[ -G file ] file是否存在并默认组与当前用户相同
[ file1 -nt file2 ] file1是否比file2新
[ file1 -ot file2 ] file1是否比file2旧
符合条件
[] && [] 与
[] || [] 或
case控制流
case value in
a | b)
commend
c)
commend
d)
commend
*)
commend
for循环
for var in list
do
commend
done
#类c for
for (( a=1 ; a<10 ; a++ ))
do
commend
done
for 分割符(IFS)
默认的换行符为
空格 制表符 换行符
#如果要修改的话
old_ifs = $IFS
#指定换行 ; ” 为切割号
IFS = $'\n';“ #$'\n'是个特例 正常应该IFS = ;
for #for循环处理的位置
...
IFS = $old_ifs #恢复分割号
while 循环
while [ ]
do
commend
done
until []
do
commend
done
break n #跳出循环 n默认为1 及跳出一层循环
continue #关键词
参数
$?
$#
$0 #脚本名
$1 #第一个参数
$2 #第二个参数
.
.
.
$9 #一共就可以接收9个参数
输出命令
echo "hello world"
-n 换行
用户输入
read var
echo var
函数
function name{ #如同写了一个名字为name的可执行文件,所以参数传递与单脚本文件一样
commends
}
return 0 #用来终止函数 并且返回指定状态码
echo #可以用来返回内容