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 判断条件:thenstatament1
statament2
…
fi
双分支的if语句:
if 判断条件;thenstatament1
statament2
…
else
statament1
statament2
…
fi
多分支的if语句:
if 判断条件1 ; thenstatement1;
…
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
相关文章推荐
- android wifi 无线调试
- 运维入门
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Linux Shell常用技巧
- Shell 脚本编程陷阱
- shell字符串操作详解
- Shell中删除某些文件外所有文件的3个方法
- Ruby中执行Linux shell命令的六种方法详解
- VB使用shell函数打开外部exe程序的实现方法
- Shell编程的一些知识集合
- Shell中的for和while循环详细总结
- 什么是Shell?Shell脚本基础知识详细介绍
- Shell脚本中引用、调用另一个脚本文件的2种方法
- Shell脚本解压rpm软件包
- Linux Shell 数组建立及使用技巧
- Shell脚本实现复制文件到多台服务器的代码分享
- Shell脚本实现批量替换文件内容
- Shell脚本实现的一个简易Web服务器例子分享
- linux Shell学习笔记第五天