第四章 shell程序设计I-入门
一、shell脚本的基本概念
shell脚本(script)是一个可执行的纯文本文件,有多个shell命令组成。
命令的执行时从上而下、从左而右的分析和执行
命令、参数间的多个空白都会被忽略
空白行以及[tab]键所致的空白也会被忽略
读取到第一个[enter]符号即开始执行命令
如果脚本中需要换行则需用[enter]转义
#是注释,任何加在#符号后的命令及文本全部被视为注释
#!用于指定本shell script使用的shell名称
shell脚本一般以.sh为后缀名
二、shell脚本的执行方法
1.直接命令行执行
必须拥有shell脚本文件的可读和可执行权限(rx)
路径要正确:a.绝对路径 /home/dmtsai/myscript.sh
b.相对路径 ./myscript.sh
c.通过变量PATH 将myscript.sh放在PATH指定的目录下
2.以bash进程执行
只要拥有shell脚本文件的可读权限(r)
# bash myscript.sh
或# sh myscript.sh
type:查看命令的类型 -t:会显示可能的三种情况:file---外部命令、alias-----命令的别名、builtin-----内置的命令功能
-a:将系统PATH定义的路径中所有含xxx名称的命令都列出来
echo、unset:变量的显示与设置
env、export:环境变量的相关操作
read:变量的输入
declare/typeset:数组与声明
三、脚本中变量的使用
1.变量的显示与设置
使用echo命令显示变量的值:
# echo $变量名
# echo ${变量名}
设置变量:# 变量名=变量值
取消变量:# unset 变量名
2.环境变量功能
env:查看环境变量
set:查看所有变量:包括环境变量和自定义变量(主要区别:作用域不用)
环境变量在整个bash运行过程中有效,自定义变量只在当前进程中有效
export:将自定义变量转化为环境变量
# export 变量名
3.从键盘读取变量值
read:从键盘读取变量值,和用户交互,在shell script中经常使用
# read [-pt] 变量名 -p:后面接提示语句
-t:后面接等待的秒数
4.声明变量类型
使用declare或typeset能声明变量的类型
# declare [-aixr] 变量名 -i:声明为整型
-x:声明为环境变量
四、数据流重定向和管道
1.数据流重定向
标准输入(stdin):代码为0,符号为<或<<
标准输出(stdout):代码为1,符号为>或>>
标准错误输出(stderr):代码为2,符号为2>或2>>
将数据从指定的流输入或输出,就称为数据重定向
标准输出流stdout默认情况下将数据输出到device
使用>将数据输出重定向到文件
>默认为覆盖文件内容,如果要追加则用>>
2>:已覆盖的方式将错误信息输出到指定文件或设备上
/dev/null:将错误信息忽略,及输出到黑洞
<:标准输入流默认从键盘输入
<<:用于设定结束输入的关键字
2.管道
管道命令的界定符号为“|”
管道命令仅会处理stdout,对stderr会忽略
管道命令必须要能够接收来自前一个命令的数据作为stdin
选取命令cut、grep
cut:将同一行的数据进行分解 -d:后面接分隔字符,与-f一起使用
-c:以字符的单位取出固定字符区间
-f:依据-d将一段信息分隔,-f指定取哪一段
cut是从一行中取出部分信息,grep是按条件取出某行
排序命令:sort、wc、uniq
sort:用于对输入内容进行排序
uniq:用于取出结果中的重复行
wc:用于统计字、字符、行 -l:仅列出行
3.双向重定向
tee:能将数据流同时输出到文件与屏幕 -a:以追加的方式将内容输出到文件
printf:文件的格式化输出命令
第五章 shell程序设计II-进阶
一、shell脚本的经典案例
二、结构化控制语句的使用
if-then语句
1.if [表达式]; then
语句
fi
2.if [表达式]; then
语句
else
语句
fi
3.if [表达式]; then
语句
elif
语句
else
语句
fi
case。。。esac语句
1.case $变量名 in
“变量值”)
语句
;;
“变量值”)
语句
;;
*)
语句
;;
esac
while循环
1.while [ 条件表达式 ]
do
语句
done
2.until [ 条件表达式 ]
do
语句
done
for循环
1.for 变量名 in value1 value2 value3
do
语句
done
2.for ((初始值;终止条件;执行步长))
do
语句
done
三、函数的使用
function 函数名()
{
程序段
}
#调用函数语法为:
函数名
四、脚本的调试
sh:支持对脚本的语法检查和调试
# sh [-nvx] scripts.sh