编程语言常识
编译器,解释器
编程语言:机器语言、汇编语言、高级语言
静态语言:编译型语言
强类型(变量在使用前一定要先声明)
事先转换成可执行格式
C、C++、JAVA、C#
动态语言:解释型语言, on the fly
弱类型
边解释边执行
PHP、SHELL、python、perl
强类型(变量在使用前一定要先声明)
事先转换成可执行格式
C、C++、JAVA、C#
动态语言:解释型语言, on the fly
弱类型
边解释边执行
PHP、SHELL、python、perl
面向过程:Shell, C
面向对象: JAVA, Python, perl, C++
shell编程基础
变量概念
变量:内存空间(当我们用变量名去引用这个变量时称为有命名的内存空间)
内存:编址的存储单元
变量类型作用:事先确定数据的存储格式和长度
字符
数值:整形,浮点型
布尔型
bash变量
bash变量类型:
环境变量本地变量(包含局部变量)
位置变量
特殊变量
环境变量
作用域:为当前shell进程及其子进程;
环境变量声明导出方法:(1)声明时直接导出:export VARNAME=VALUE
(2)先声明后导出:VARNAME=VALUE
export VARNAME
export VARNAME
注意:脚本在执行时会启动一个子shell进程;
命令行中启动的脚本会继承当前shell环境变量;
系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量;
命令行中启动的脚本会继承当前shell环境变量;
系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量;
本地变量
(set可省略) VARNAME=VALUE: 作用域为整个bash进程;局部变量
local VARNAME=VALUE:作用域为当前代码段;位置变量:用来引用脚本的参数
$1, $2, ...
特殊变量:用来保存某些特殊数据
$?: 上一个命令的执行状态返回值;
程序执行,可能有两类返回值:
(1)程序执行结果
(2)程序状态返回代码(0-255)
0: 正确执行
1-255:错误执行,1,2,127系统预留;
$#:参数的个数
$*: 参数列表
$@:参数列表
撤销环境变量或本地变量:
unset VARNAME
查看当shell中变量(包括环境变量和本地变量):
set
查看当前shell中的环境变量:
printenv
env
export
脚本
脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序
为了让计算机知道如何去解释脚本,脚本的第一行都要加上一个 shebang(魔数):#!/bin/bash
条件测试
条件测试类型:
整数测试字符测试
文件测试
条件测试的表达式:
[ expression ] (命令测试法)[[ expression ]] (关键字测试法)
test expression
整数测试:
-eq: 测试两个整数是否相等;比如 [ $A -eq $B ]-ne: 测试两个整数是否不等;不等,为真;相等,为假;
-gt: 测试一个数是否大于另一个数;大于,为真;否则,为假;
-lt: 测试一个数是否小于另一个数;小于,为真;否则,为假;
-ge: 大于或等于
-le:小于或等于
文件测试:
-e FILE:测试文件是否存在-f FILE: 测试文件是否为普通文件
-d FILE: 测试指定路径是否为目录
-r FILE: 测试当前用户对指定文件是否有读取权限;
-w
-x
字符测试:
==:测试是否相等,相等为真,不等为假!=: 测试是否不等,不等为真,等为假
>
<
(注意:上述符号两边要加空格)
-n string: 测试指定字符串是否为空,空则真,不空则假
-z string: 测试指定字符串是否不空,不空为真,空则为假
-n string: 测试指定字符串是否为空,空则真,不空则假
-z string: 测试指定字符串是否不空,不空为真,空则为假
命令的间逻辑关系:
逻辑与: &&
逻辑或: ||
非:!
if语句
if 判断条件
then
statement
else
ststement
fi
或者
if 判断条件;then
statement
else
ststement
fi
多分支的if语句:
if 判断条件1; then
statement1
...
elif 判断条件2; then
statement2
...
elif 判断条件3; then
statement3
...
else
statement4
...
fi
循环
for 循环
for 变量 in 列表; do
循环体
done
例子:对1到100求和
#!/bin/bash # declare -i SUM=0 for I in {1..100}; do let SUM=$[$SUM+$I] done echo "The sum is: $SUM."
while
语法:
while CONDITION; do
statement
...
done
例子:对1到100求和
#!/bin/bash declare -i I=1 declare -i SUM=0 while [ $I -le 100 ]; do let SUM+=$I let I++ done echo $SUM
列表生成
(1){1..100}
(2)seq 起始数 步进长度 结束数
退出脚本
exit
exit n (n为退出状态码)
如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码即为脚本的退出状态码;
测试脚本有没有语法错误
bash -n 脚本
单步执行:显示脚本执行的每个步骤
bash -x 脚本