您的位置:首页 > 运维架构 > Shell

SHELL 编程

2016-06-24 21:35 162 查看

编程语言:

编译器、解释器
机器语言,汇编语言,
高级语言:
静态语言:编译型语言
强类型(变量):
关键字:
事先转换成可执行格式
C、C++、C#、JAVA...

动态语言:解释性语言
弱类型(变量):
边解释边执行
PHP、SHELL、Python、Perl、Lua...


解释器:通常是由静态语言编译成的。

面向过程:shell,C

面向对象:JAVA,PYTHON,C++,PERL

linux内核是由C语言编译完成的。

每个语言都有自己适合的领域,没有所谓的普适性和最好的语言。

变量:内存空间,命名

内存:编址的储存单元

进程:

shell:弱类型编程语言

强:变量在使用之前,必须事先声明,甚至还需要初始化。

弱:变量用时声明,甚至不区分类型

编程能力:

脚本编程:
缓冲区溢出


变量赋值: var_name=value

bash变量类型:

环境变量

本地变量(局部变量)

位置变量

特殊变量

本地变量:

VARNAME=VALUE:作用域为整个bash进程;


局部变量:

local VARNAME=VALUE:作用域为当前代码段;


环境变量:作用域为当前shell进程及其子进程;

export VARNAME=VALUE
“导出”
OR
VARNAME=VALUE
export VARNAME


位置变量:

1,2,…

shift N 去除前N个参数,如果没有N,去除第一个参数。

特殊变量:

$?:上一个命令的执行状态返回值

$#:参数的个数

$*:参数列表

$@:参数列表

程序执行,可能有两类返回值:

程序执行结果

程序状态返回代码(0-255)

0:正确执行

1-255:错误执行,1,2,127系统预留;

输出重定向:

>

>>

2>

2>>

&>

id student &> /dev/null

echo $?

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

撤销变量:

unset VARNAME

查看所有shell中变量:

set

查看当前shell中的环境变量:

printenv

env

export

脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现源程序

shebang:魔数

#!/bin/bash

# 注释行,不执行

脚本在执行时会启动一个子shell进程:

命令行中启动的脚本会继承当前shell环境变量;

系统自动执行的脚本{非命令行启动}就需要自我定义需要各种环境变量:

bash:

引用变量:${VARNAME},括号可省略。

再次强调

单引号,强引用

双引号,弱引用

反引号,应用命令的执行结果

作业练习



条件判断:

如果用户不存在

添加用户,给密码病显示添加成功

语法总结

bash中如何实现条件判断?

条件测试类型:

整数测试;

字符测试;

文件测试;

条件测试的表达式:

[ expression ] (中括号前后必须有空格):命令测试法
[[ expression ]]:关键字测试法
test expression


int1=10

int2=20

[ $int1 -eq $int2 ]

[[ $int1 -eq $int2 ]]

test $int1 -eq $int2

整数比较:

-eq:等于
-ne:不等于
-gt:大于
-lt:小于
-ge:大于等于
-le:小于等于


文件测试:

-e FILE: 测试文件是否存在

-f FILE:测试文件是否为普通文件

-d FILE:测试指定路径是否为目录

-r FILE:测试当前用户对该文件是否有读权限

-w FILE:

-x FILE:

!取反

$:! id student && useradd student(第一个条件为假就不测试第二个了)

$:id user666 || useradd user666(第一个条件为假就不测试第二个了)

变量名称:

只能包含字母、数字和下划线,并且不能以数字开头;

不应该跟系统中已有的环境变量重名;

最好做到见名知意。

if判断

单分支的if语句

if 判断条件:then

statament1

statament2



fi

双分支的if语句:

if 判断条件;then

statament1

statament2



else

statament1

statament2



fi

多分支的if语句:

if 判断条件1 ; then

statement1;



elif 判断条件2 ; then

statement2;



elif 判断条件3 ; then

statement3;



else

statement4;



fi

定义脚本的执行状态码

exit:退出脚本

exit #:定义脚本的退出码

r如果脚本没有定义退出状态码,那么,最后执行的一条命令的退出码即为脚本的退出码。

测试脚本是否有语法错误:

bash -n:检测语法错误

bash -x:打印依次单步执行的脚本

` `引用命令的执行结果

什么都不加表示命令的状态结果。

SHELL 中如何进行算术运算

let 算术运算表达式

let c=$a+$b

$[算术运算表达式]

c = $ [ $a + $b ]

3.$((算术运算表达式))

c=$(($a+$b))

expr 算术运算表达式, 表达式中各操作数及运算符之间要有空格,而且要使用命令引用

c=`expr $a + $b `

字符测试

==:测试是否相等,相等为真,不等为假

!=: 测试是否不等,不等为真,相等为假

> :

< :

-n string:测试字符串是否为空,空则真,不空则假

-s string:测试字符串是否为不空,不空为真,空为假

for 循环

一般形式

for 变量 in 列表;do
循环体
done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell