shell 编程
编译器
编程语言:机器语言,汇编语言,高级语言
静态语言:编译型语言
强类型(变量):事前确定变量类型
关键字:
事先转换成可执行格式
c,c++,java,c#
动态语言:解释性语言 ,on the fly
弱类型
边解释边执行
asp ,php,shell,python,perl :所有脚本都需要解释器
面向对象:java,python ,c++
分解为各个对象
面向过程:shell,c
着眼于问题解决的过程
变量:内存空间;命名
内存:编址的存储单元
进程:再内存中
变量类型:事先确定数据的存储格式和长度
字符
数值
整型
浮点数:11.23
布尔型:TRUE,FAUS,
字符串
逻辑运算:与,或,非,异或
shell:弱类型编程语言
强:变量再使用前,必须事前声明,甚至还需初始化
若:变量用时声明,甚至不区分类型
位置变量
特殊变量
本地变量:
varname=value;作用域整个bash进程
局部变量:
local varname=value;作用域当前代码段
环境变量:作用域为当前shell进程及其子进程;
export varname=value : 定义环境变量
"导出"
位置变量:
$1,$2 ....
特殊变量:
$?:保存上一个命令的执行状态的返回值
程序执行:可能有两类返回的值
程序执行结果
程序状态返回代码(0~255)
0:正确执行
1~255:错误执行,1,2,127,系统预留
撤销命令:
unset varname
查看当前shell中的环境变量
变量中追加值:varname=$varname:addvarname
脚本:命令的堆砌,按实际需要,
shebang:魔数 ;
条件测试类型:
整数测试
字符测试
文件测试
条件测试的表达式:
[expression]
[[expression]]
test expression
整数比较:
-eq:测试两个整数是否相等:$A -eq $B
-ne:测试两个整数是否不等:
-gt:测试一个数是否大于另一个数
-lt:测试一个数是否小雨另一个数
-ge:大于或等于
-le:小于或等于
命令的间逻辑关系:
逻辑与:&&
第一个条件为假时,第二个条件不用再判断
第一个条件为真的时候,第二个调价必须判断
逻辑或:||
条件判断;控制结构
if 判断条件;then
statement1
....
if 判断条件;then
statement1
......
fi
对于shell默认所有变量的值都是字符串
dev/null :软件设备,bit bucket数据黑洞
脚本在执行时会启动一个字shell进程
命令行中的启动的子进程会继承当前shell环境变量
系统自动执行的脚本(非命令启动)就需要自我定义需要的环境变量
bash:
引用变量:${varialbename} ,括号有事可以省略
单引号:强引用:不做变量的替换
双引号:弱引用,做变量的替换
shell中如何进行算术运算:
A=6
B=3
1.let 算术运算表达式
let C=$A+$B
2.$[算术运算表达式]
c =$[$A+$B]
3.$ ((算术运算表达式))
C=$(($A+$B))
4.expr算术运算表达式,表达式中个操作数几运算符之间要有空格,而且要使用命令引用
C=`expr $A + $B`
Bash编程
一.Bash特殊字符
1.通配符:
* :匹配任何字符串
?:匹配任何单一字符
集合运算符:用一些单个字,一个连续范围或断续的字符集合作为通配符
[set]:用字符集合做通配符匹配但个字符
[a-o],[a-h,w-z]
2.花括号展开式(可以嵌套):
格式:[前导字符串]{字符串1[{嵌套字符串1...}][嵌套字符串2]}[后继字符串]
例如:c{a{r,t,b},b{a,c}}s ls s{e[c-f],p}*
3.其他特殊字符:
< :输入重定向
> :输出重定向(没有文件就创建,有文件就)
>> :输出重定向(没有就创建,有则追加)
'' :强引用字符串,不解释特殊字符串
"" :若引用字符串,解释所有特殊字符串
` :命令替换(位于tab键上方)
; :命令分隔符
& :在后台执行命令
4.位置变量:
位置变量对于应与命令行参数,其中$0为脚本名称,$1为第一个参数,依次类推,参数超过九个必须使用
${}引用变量。shell保留这些变量,不允许用户以另外的方式定义它们,传给脚本或函数的位置变量是局部和
只读的,而其余变量是全局的。
5.其他变量:
$? :保存前一个命令的返回码
$- :在shell启动或使用set命令时提供选项
$$ :当前shell的进程号
$! :上一个进程的进程号
$# :传给脚本或函数的参数格式,及位置变量数减一
^$ :空白行
\< :其后面的任意字符必须作为单词首部出现 或者 \b
\> :其后面的任意字符必须作为单词的尾部出现
基本正则表达式:
\ :转义字符
: :空命令,等价于"NOP"(no opertate),也可以被认为与shell的内建命令(true)作用相同。
() :命令组
\<,>\正则表达式中的单词边界
如:grep '\<the>\' textfile
- :之前工作的目录."cd - "将回到之前工作的目录
变量赋值和替换
a=375 hello=$a
注意:在赋值的前后一定不要有空格,如果"VARIABLE =value",如果有空格脚本尝试运行一个
"VARIABLE"的命令,带着一个"=value"的参数
如果"VARIABLE= value",脚本将尝试运行一个"value"的命令,带着一个被赋值成环境变量
编译器
编程语言:机器语言,汇编语言,高级语言
静态语言:编译型语言
强类型(变量):事前确定变量类型
关键字:
事先转换成可执行格式
c,c++,java,c#
动态语言:解释性语言 ,on the fly
弱类型
边解释边执行
asp ,php,shell,python,perl :所有脚本都需要解释器
面向对象:java,python ,c++
分解为各个对象
面向过程:shell,c
着眼于问题解决的过程
变量:内存空间;命名
内存:编址的存储单元
进程:再内存中
变量类型:事先确定数据的存储格式和长度
字符
数值
整型
浮点数:11.23
布尔型:TRUE,FAUS,
字符串
逻辑运算:与,或,非,异或
shell:弱类型编程语言
强:变量再使用前,必须事前声明,甚至还需初始化
若:变量用时声明,甚至不区分类型
bash:
环境变量
局部变量位置变量
特殊变量
本地变量:
varname=value;作用域整个bash进程
局部变量:
local varname=value;作用域当前代码段
环境变量:作用域为当前shell进程及其子进程;
export varname=value : 定义环境变量
"导出"
位置变量:
$1,$2 ....
特殊变量:
$?:保存上一个命令的执行状态的返回值
程序执行:可能有两类返回的值
程序执行结果
程序状态返回代码(0~255)
0:正确执行
1~255:错误执行,1,2,127,系统预留
撤销命令:
unset varname
查看当前shell中的环境变量
printenv
env
export变量中追加值:varname=$varname:addvarname
脚本:命令的堆砌,按实际需要,
shebang:魔数 ;
#!/bin/bash 第一行必须这么写
条件测试类型:
整数测试
字符测试
文件测试
条件测试的表达式:
[expression]
[[expression]]
test expression
整数比较:
-eq:测试两个整数是否相等:$A -eq $B
-ne:测试两个整数是否不等:
-gt:测试一个数是否大于另一个数
-lt:测试一个数是否小雨另一个数
-ge:大于或等于
-le:小于或等于
命令的间逻辑关系:
逻辑与:&&
第一个条件为假时,第二个条件不用再判断
第一个条件为真的时候,第二个调价必须判断
逻辑或:||
条件判断;控制结构
if 判断条件;then
statement1
....
fi
if 判断条件;then
statement1
......
fi
对于shell默认所有变量的值都是字符串
dev/null :软件设备,bit bucket数据黑洞
脚本在执行时会启动一个字shell进程
命令行中的启动的子进程会继承当前shell环境变量
系统自动执行的脚本(非命令启动)就需要自我定义需要的环境变量
bash:
引用变量:${varialbename} ,括号有事可以省略
单引号:强引用:不做变量的替换
双引号:弱引用,做变量的替换
shell中如何进行算术运算:
A=6
B=3
1.let 算术运算表达式
let C=$A+$B
2.$[算术运算表达式]
c =$[$A+$B]
3.$ ((算术运算表达式))
C=$(($A+$B))
4.expr算术运算表达式,表达式中个操作数几运算符之间要有空格,而且要使用命令引用
C=`expr $A + $B`
Bash编程
一.Bash特殊字符
1.通配符:
* :匹配任何字符串
?:匹配任何单一字符
集合运算符:用一些单个字,一个连续范围或断续的字符集合作为通配符
[set]:用字符集合做通配符匹配但个字符
[a-o],[a-h,w-z]
2.花括号展开式(可以嵌套):
格式:[前导字符串]{字符串1[{嵌套字符串1...}][嵌套字符串2]}[后继字符串]
例如:c{a{r,t,b},b{a,c}}s ls s{e[c-f],p}*
3.其他特殊字符:
< :输入重定向
> :输出重定向(没有文件就创建,有文件就)
>> :输出重定向(没有就创建,有则追加)
'' :强引用字符串,不解释特殊字符串
"" :若引用字符串,解释所有特殊字符串
` :命令替换(位于tab键上方)
; :命令分隔符
& :在后台执行命令
4.位置变量:
位置变量对于应与命令行参数,其中$0为脚本名称,$1为第一个参数,依次类推,参数超过九个必须使用
${}引用变量。shell保留这些变量,不允许用户以另外的方式定义它们,传给脚本或函数的位置变量是局部和
只读的,而其余变量是全局的。
5.其他变量:
$? :保存前一个命令的返回码
$- :在shell启动或使用set命令时提供选项
$$ :当前shell的进程号
$! :上一个进程的进程号
$# :传给脚本或函数的参数格式,及位置变量数减一
^$ :空白行
\< :其后面的任意字符必须作为单词首部出现 或者 \b
\> :其后面的任意字符必须作为单词的尾部出现
基本正则表达式:
\ :转义字符
: :空命令,等价于"NOP"(no opertate),也可以被认为与shell的内建命令(true)作用相同。
() :命令组
\<,>\正则表达式中的单词边界
如:grep '\<the>\' textfile
- :之前工作的目录."cd - "将回到之前工作的目录
变量赋值和替换
a=375 hello=$a
注意:在赋值的前后一定不要有空格,如果"VARIABLE =value",如果有空格脚本尝试运行一个
"VARIABLE"的命令,带着一个"=value"的参数
如果"VARIABLE= value",脚本将尝试运行一个"value"的命令,带着一个被赋值成环境变量