SHELL体系知识I
SHELL作为最常用软件技能之一,能自动化、批量的完成很多相关简单的功能。学习SHELL的重要性不言而喻,那么如何学习SHELL自然成为一个重要的问题?
个人认为学习SHELL需要分四部分进行:
1.学习SHELL入门教程(如:http://www.hechaku.com/shell/)
2.总结SHELL的语法知识
3.总结SHELL的常用指令
4.归档SHELL的常用用法
第一步由于网上的资料又多又好,在此我就不在赘述。我从第二步开始向大家展示我总结的SHELL理论图:
1.概念:C语言编写,需要解释器执行的指令集合。
1.1.C语言编写:继承了C语言的很多语法结构。
1.2.解释器执行:脚本语言。
1.3.指令:编译好能执行特定功能的执行程序。
2.变量
2.1.概念:通过变量名访问、内容可变的抽象概念。
2.2.分类
2.2.1.数值、字符串
2.2.1.1.定义:variable_name=variable_value
2.2.1.2.使用:${variable_name}
2.2.2.数组
2.2.2.1.定义:array_name=( value…valuen)/array_name[index]=value
2.2.2.2.使用:${array_name[index]}
2.2.3.保留变量
2.2.3.1.参数类型
2.2.3.1.1.${#}:传入参数的个数。
2.2.3.1.2.${n}:引用传入的第n个参数。
2.2.3.1.3.${}:将n个参数做为一个参数传入。
2.2.3.1.4.${@}:将n个参数做为n个参数传入。
2.2.3.2.环境类型
2.2.3.2.1.${0}:当前使用的SHELL。
2.2.3.2.2.${$}:当前SHELL的进程号。
2.2.3.2.3.${?}:上一条指令执行状态。
2.3.只读设置:readonly variable_name
3.运算符
3.1.算术运算符
3.1.1.符号:+、-、、/、%
3.1.2.示例
3.1.2.1.整型运算:variable_name=expr ${num} / 10
3.1.2.2.浮点型运算:variable_name=$( echo “scale=10; ${num} / 76”|bc)
3.2.赋值运算符:=
3.3.逻辑判断运算符
3.3.1.符号
3.3.1.1.判断符号:==、!=、>、<
3.3.1.2.特点
3.3.1.2.1.>、<符号使用时需要增加转义字符。
3.3.1.2.2.变量当成字符串比较,不适合数值比较。
3.3.1.2.3.没有>=、<=符号使用。
3.3.2.保留字
3.3.2.1.保留字:-eq、-ne、-ge、gt、le、lt
3.3.2.2.特点
3.3.2.2.1.适用于整型数据比较,浮点型数据比较请使用bc指令。
3.4.布尔运算符
3.4.1.与
3.4.1.1.符号:-a、&&
3.4.1.2.示例
3.4.1.2.1.-a:[ ${DRINK} == ‘appe’ -a ${DRINK} == ‘all’ ]
3.4.1.2.2.&&:[ ${DRINK} == “tee” ] && [ ${DRINK} == “cofee” ]
3.4.2.或
3.4.2.1.符号:-o、||
3.4.2.2.示例
3.4.2.2.1.-o:[ ${DRINK} == ‘appe’ -o ${DRINK} == “all” ]
3.4.2.2.2.||:[ ${DRINK} == tee ] || [ ${DRINK} == cofee ]
3.4.3.非
3.4.3.1.符号:!
3.4.3.2.示例:[ ! ${str1} < ${str2} ]
3.5.字符串判断:-z、-n
3.6.文件测试运算符:-d、-f、-r、-w、-x
4.分支结构
4.1.基础结构
4.1.1.if
4.1.1.1.示例
if [ ${DRINK} == “coffee” ]
then
FLAG=1
elif [ ${DRINK} == “tea”
then
FLAG=2
else
FLAG=3
fi
4.1.2.case
4.1.2.1.示例
case $DRINK} in
tea|coffee|water)
echo “Go to canteen”
;;
all|appe)
echo “Available at home”
;;
*)
echo “Error:Invalid selection”
;;
esac
4.1.3.while
4.1.3.1.示例
while [ ${num} -ge 122 ]
do
echo " The value of variable is ${num}"
break
done
4.1.4.for
4.1.4.1.示例
for LINE_STR in ${array[@]}
do
echo ${LINE_STR}
done
4.1.5.until
4.1.5.1.示例
until [ ${num} -gt 10 ]
do
echo “${num}”
done
4.1.6.select
4.1.6.1.示例
select DRINK in $( echo “tea cofee water juice”)
do
echo “${DRINK} is select value”
echo “The number of cycle is ${num}”
num=expr ${num} + 1
done
4.2.控制字符:continue、break
5.函数
5.1.概念:反复执行的代码块。
5.2.定义
function_name()
{ list of commands}
5.3.使用
function_name para_list
5.4.外调相互调用:. fullpath_name/source fullpath_name
5.5.内部特殊用法
5.5.1.变量替换
5.5.1.1.${var:-word}:变量为空或未设置,则返回word且不改变var值。
5.5.1.2.${var:+word}:变量设置,则返回word且不改变var值。
5.5.1.3.${var:?msg}:变量为空或未设置,则将消息送到标准输出,且终止程序。
5.5.1.4.${var:=word}:变量为空或未设置,则返回word且改变var值。
5.5.2.命命替换
5.5.2.1.command
5.5.2.2.$(command)
5.5.3.重定向
5.5.3.1.>:以新文件形式重定向标准输出。
5.5.3.2.>>:以追加形式重定向标准输出。
5.5.3.3.<:重定向标准输入。
5.5.3.4.<<:用于输入重定向一个交互式的shell脚本或程序。
6.shell执行
6.1.子shell执行
6.1.1…/shell_name.sh:需要执行权限。
6.1.2.sh shell_name.sh:不需求执行权限。
6.2.当前shell执行
6.2.1.source shell_name.sh:父子shell能共享相关资源。
6.2.2… shell_name.sh:同上
这个总结图只是一个参考,画得好不好,对不对都不重要。但有三点是重要的:
1.学习之后要自己画一张自己的图。
2.理解性的记忆这张图,重温这张图。
3.使用SHELL知识时回顾这张图,系统的思考、应用这张图。