当前位置: 移动技术网 > 科技>操作系统>Linux > shell 简单脚本编程

shell 简单脚本编程

2019年04月27日  | 移动技术网科技  | 我要评论

shell脚本编程
编译器,解释器

编程语言: 机器语言,汇编语言,高级语言

静态语言:编译型语言
强类型(变量)
事先转换成可执行格式
c,c++,java,c#


动态语言:解释型语言,on the fly
弱类型
边解释边执行
asp,asp.net,php,shell,python,perl


shell: 弱类型编程语言
强类型: 变量在使用前,必须事先声明,甚至需要初始化
弱类型: 变量用时声明,甚至不区分类型

 

bash变量类型:
环境变量:作用域为当前shell进程及其子进程
export name=value
或者name = value
export name
"导出"
脚本在执行时会启动一个子shell进程:
命令行中启动的脚本会继承当前的shell环境变量
系统自动执行的脚本(非命令行启动)就需要自我定义需要的各环境变量


本地变量(局部变量):
引用变量:${变量名},括号可省略。变量替换 强引用 用"" 双引号
set name=value : 作用域为整个bash进程
局部变量:
local name=value ,作用域为当前代码段:

撤销变量
unset name

查看当前shell 中的变量: set(查看所有变量)

查看当前shell 中得环境变量
printenv
env
export

位置变量
$1, $2....
特殊变量(系统变量)
$? : 上一个命令执行状态返回值;


程序执行:可能有两个状态返回值
程序执行结果
程序返回代码 (0-255)
0 : 正确执行
1-255:错误执行
1,2,127为系统预留执行返回代码


/dev/null : 软件设备, bit bucket , 数据黑洞


脚本:
命令的堆砌,按照实际需要,结合命令流程控制机制实现的源程序
shebang: 魔数
#/bin/bash 指明执行的脚本执行路径
# 注释行,不执行

变量追加
name=aaaa
echo $name
name=$name:bbb
echo name
完成变量的内容追加,类似数组添加元素



条件判断:
bash中,如何实现条件判断?
条件测试类型:
整数测试:
字符测试:
文件测试:

条件测试的表达式:
[ expression ] : []两端必须要有空格 命令测试法
[ [expression] ] 关键字测试法
test expression

如:
int1=55
int2=65
[ $int1 -eq int2 ]
[ [ $int1 -eq int2 ] ]
test $int1 -eq int2


整数比较:
-eq : 是否相等 $a -eq $b
-ne : 是否不等: 不等为true,否则为false。
-gt : 大于
-lt : 小于
-ge : 大于或等于
-le : 小于或等于


命令间的逻辑关系:
逻辑与: &&
第一个条件为假时,第二条件不再判断,最终结果已有:
第一个条件为真时,第二条件必须判断

逻辑或: ||


编程风格——>> 变量名称:
1 只能包含字母,数字和下划线,并且不能以数字开头。
2 不能跟系统中已有的环境变量重名。
3 最好见名知意

条件判断: 控制结构
单分支if 语句:

if 判断条件; then
statement 1
statement 2
statement 3
...
fi

双分支if 语句:
if 判断条件;then
statement 1
statement 2
statement 3
..
else
statement 4
statement 5
...
fi



shell中的算术运算:
a=3,b=6
1 let 算术运算表达式
let c =$a+$b
2 $[ 算术运算表达式]
c =${$a+$b}

3 $((算术运算表达式))
c = $(($a+$b))

4 expr 算术运算表达式, 表达式中各操作数及运算符之间要有空格,并且要使用命令引用
c = `expr $a + $b `




文件测试:
- e file(文件名或者文件路径) : 测试文件是否存在 isexit
- f file : 测试文件是否为普通文件
- d file :测试指定路径是否为目录
- r file : 测试当前用户对指定路线是否可读。
- w file : 测试当前用户对指定路线是否可写。
- x file : 测试当前用户对指定路线是否可执行。

[ -e /etc/inittab ]


测试脚本是否有语法错误
bash - n 脚本
bash - x 脚本 逐步展示执行过程


定义脚本退出状态码:
exit : 退出脚本(后面跟上需要的状态码)
如果脚本没有明确定义退出状态码,那么最后执行的一条命令的突出码即为脚本的退出码。
exit 0-255

bash的变量类型
本地变量(局部变量)
环境变量
位置变量:
$1,$2.... (参数位置)
shift: 参数轮替,后面跟数字,实现轮替的步进
./file.sh /etc/inittab /etc/test
$1: /etc/inittab
$2: /etc/test
特殊变量:
$? : 上一条命令的退出状态码
$# : 参数的个数
$* : 参数列表
$@ : 参数列表



如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网