9-13 shell工作原理和编程中知识点总结
2015-09-22 10:08
555 查看
1、SHELL工作原理
shell是操作系统的外壳,为用户提供使用操作系统的接口。如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。 shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。shell将命令或应用程序分解为系统调用并传给Linux内核。当普通用户成功登录,系统将执行一个称为shell的程序,称为守护进程。
守护进程,服务进程:开机时自动启动;
交互式进程:shell应用程序
广义:GUI,CLI
GUI:基于图形界面
CLI:提供命令提示符
词法分析: 命令,选项,参数
命令的类型:
内建命令
外部命令:查找路径由PATH环境变量定义
fork() 创建为一个进程;
脚本或程序源文件:文本文件
把文本文件转换成机器可执行的程序的两种方式:
编译执行:预处理-->编译-->汇编-->链接;需事先编译完成,完成的结果会生成二进制程序文件
例:C, C++
解释执行:由解释器全程参与运行过程,每次读取一行,运行一行;
Python:编程库
程序控制结构,调用编程库完成程序编写;
库文件:功能模块,在编程中可调用;通过其API;
Bash:编程
程序控制结构,调用机器上命令程序文件进行程序编写;
外部命令:各应用程序提供;
程序:指令+数据
为了完成复杂工作把指令的运行机制设计成算法,把数据存储为特定格式叫做数据结构
所以程序也可称为:算法+数据结构
指令程序组织方式:
过程式编程:以指令为中心,设计算法,数据服务于算法;
面向对象式编程:以数据为中心,设计数据结构(类),程序服务于数据结构;
bash过程式编程:
顺序执行:逐个执行
选择执行:只执行其中一个分支
循环执行:一段代码要执行0,1或多遍
2、SHELL知识点
编程元素:变量、程序的执行流程、函数
(1)变量:可变化的量,命名内存空间
以作用方式可分为:
本地变量:当前shell进程;
环境变量:当前shell进程及其子进程;
局部变量:某个函数执行过程;
位置参数变量:在脚本中引用传递给脚本的参数;在函数中引用传递给函数的参数;
特殊变量:$?, $*, $@, $#, $$
变量类型:数值,字符
数值:
整数
浮点数
字符:
ASCII
变量类型的作用:
存储空间
运算
存储格式
语言对变量类型的支持力度:
强类型:变量类型不允许有任何差池
弱类型:变量类型不严格区分;
默认存储机制:bash为字符
bash的变量使用特点:弱类型、无须事先声明;默认为字符串
本地变量:name=value
name: 变量名
=:赋值符号
value:值
引用变量:${name}, $name
引用方式:
弱引用: "", 其内部的变量引用会被替换为变量值;
强引用:'',其变量的变量引用会保持原有字符;
命令引用:`COMMAND`, $(COMMAND),引用命令的执行结果;
declare -i name[=value]
let name=value
查看所有变量:set
生命周期:从创建开始到销毁结束:
销毁的机制:
自动销毁:shell进程终止;
手动销毁:unset name
export name[=value]
declare -x name[=value]
销毁:unset name
(2)脚本:文本文件
运行脚本:事实上是运行一个bash进程,此进程负责从脚本文件中读取一个执行逻辑,而后由bash进程负责解析并运行此逻辑;
启动脚本:
(1) 直接使用bash执行:# bash /PATH/TO/SCRIPT_FILE
(2) 给文本文件一个执行权限:# ./PATH/TO/SCRIPT_FILE
shebang:脚本格式
#!/bin/bash 第一行:顶格给出shebang
#注释行:
-n: 检查脚本中的语法错误;
-x:调试执行脚本;
0: 成功
1-255:失败
特殊变量:$?:上一条命令的执行状态结果;
布尔型:
真”:成功
“假”:失败
自定义脚本的状态结果:exit
注意:脚本中任何位置执行了exit命令即会终止当前shell进程
shell是操作系统的外壳,为用户提供使用操作系统的接口。如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。 shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。shell将命令或应用程序分解为系统调用并传给Linux内核。当普通用户成功登录,系统将执行一个称为shell的程序,称为守护进程。
守护进程,服务进程:开机时自动启动;
交互式进程:shell应用程序
广义:GUI,CLI
GUI:基于图形界面
CLI:提供命令提示符
词法分析: 命令,选项,参数
命令的类型:
内建命令
外部命令:查找路径由PATH环境变量定义
fork() 创建为一个进程;
脚本或程序源文件:文本文件
把文本文件转换成机器可执行的程序的两种方式:
编译执行:预处理-->编译-->汇编-->链接;需事先编译完成,完成的结果会生成二进制程序文件
例:C, C++
解释执行:由解释器全程参与运行过程,每次读取一行,运行一行;
Python:编程库
程序控制结构,调用编程库完成程序编写;
库文件:功能模块,在编程中可调用;通过其API;
Bash:编程
程序控制结构,调用机器上命令程序文件进行程序编写;
外部命令:各应用程序提供;
程序:指令+数据
为了完成复杂工作把指令的运行机制设计成算法,把数据存储为特定格式叫做数据结构
所以程序也可称为:算法+数据结构
指令程序组织方式:
过程式编程:以指令为中心,设计算法,数据服务于算法;
面向对象式编程:以数据为中心,设计数据结构(类),程序服务于数据结构;
bash过程式编程:
顺序执行:逐个执行
选择执行:只执行其中一个分支
循环执行:一段代码要执行0,1或多遍
2、SHELL知识点
编程元素:变量、程序的执行流程、函数
(1)变量:可变化的量,命名内存空间
以作用方式可分为:
本地变量:当前shell进程;
环境变量:当前shell进程及其子进程;
局部变量:某个函数执行过程;
位置参数变量:在脚本中引用传递给脚本的参数;在函数中引用传递给函数的参数;
特殊变量:$?, $*, $@, $#, $$
变量类型:数值,字符
数值:
整数
浮点数
字符:
ASCII
变量类型的作用:
存储空间
运算
存储格式
语言对变量类型的支持力度:
强类型:变量类型不允许有任何差池
弱类型:变量类型不严格区分;
默认存储机制:bash为字符
bash的变量使用特点:弱类型、无须事先声明;默认为字符串
本地变量:name=value
name: 变量名
=:赋值符号
value:值
[root@centos6 ~]# user=liulong [root@centos6 ~]# echo $user liulong变量名:只能包含数字、字母和下划线;且不能以数字开头;
引用变量:${name}, $name
引用方式:
弱引用: "", 其内部的变量引用会被替换为变量值;
强引用:'',其变量的变量引用会保持原有字符;
命令引用:`COMMAND`, $(COMMAND),引用命令的执行结果;
[root@centos6 ~]# echo "my name is $user" 弱引用 my name is liulong [root@centos6 ~]# echo 'my name is $user' 强引用 my name is $user声明为整型:
declare -i name[=value]
let name=value
查看所有变量:set
生命周期:从创建开始到销毁结束:
销毁的机制:
自动销毁:shell进程终止;
手动销毁:unset name
[root@centos6 ~]# unset user [root@centos6 ~]# echo $user环境变量:被“导出”的本地变量
export name[=value]
declare -x name[=value]
[root@centos6 ~]# declare -x user=liulong [root@centos6 ~]# echo $user liulong [root@centos6 ~]# bash Welcome root,your user id is 0. [root@centos6 ~]# echo $user liulong [root@centos6 ~]# pstree init─┬─anacron ├─atd ├─auditd───{auditd} ├─crond ├─dhclient ├─login───bash ├─5*[mingetty] ├─rsyslogd───3*[{rsyslogd}] ├─2*[sendmail] ├─sshd───sshd───bash───bash───pstree └─udevd───2*[udevd]查看所有环境变量:env, printenv, export
销毁:unset name
(2)脚本:文本文件
运行脚本:事实上是运行一个bash进程,此进程负责从脚本文件中读取一个执行逻辑,而后由bash进程负责解析并运行此逻辑;
启动脚本:
(1) 直接使用bash执行:# bash /PATH/TO/SCRIPT_FILE
(2) 给文本文件一个执行权限:# ./PATH/TO/SCRIPT_FILE
shebang:脚本格式
#!/bin/bash 第一行:顶格给出shebang
#注释行:
#!/bin/bash #2015-9-23 liulong echo 'hello word!!!' [root@centos6 tmp]# bash 1.sh hello word!!! [root@centos6 tmp]# chmod +x 1.sh [root@centos6 tmp]# ll total 36 -rwxr-xr-x. 1 root root 57 Sep 22 16:09 1.sh [root@centos6 tmp]# ./1.sh hello word!!!bash的常用选项:
-n: 检查脚本中的语法错误;
-x:调试执行脚本;
[root@centos6 tmp]# vi 2.sh #!/bin/bash #Description #Version #author useradd testuser1 echo testuser1 | passwd --stdin testuser1 [root@centos6 tmp]# bash -n 2.sh [root@centos6 tmp]# bash -x 2.sh + useradd testuser1 + echo testuser1 + passwd --stdin testuser1 Changing password for user testuser1. passwd: all authentication tokens updated successfully.命令状态结果:bash进程用于追踪执行的命令成功与否的状态:
0: 成功
1-255:失败
特殊变量:$?:上一条命令的执行状态结果;
布尔型:
真”:成功
“假”:失败
自定义脚本的状态结果:exit
注意:脚本中任何位置执行了exit命令即会终止当前shell进程
相关文章推荐
- Ruby中的变量学习总结
- 详解Lua中的变量相关知识点
- dos批处理文件中的变量小结
- 探索PowerShell(七) PowerShell变量
- VBScript教程 第四课VBScript变量
- 关于SQL 存储过程入门基础(基础知识)
- C#语法相比其它语言比较独特的地方(二)
- perl 变量 $/ 的用法解析 上下文为行模式时,$/ 定义以什么来区分行
- VBS教程:VBScript 基础-VBScript 变量
- XML指南――XML 语法
- Erlang语法学习笔记:变量、原子、元组、列表、字符串
- phplib中的一些基本语法和函数
- Ruby基础语法初探
- mssql存储过程表名和字段名为变量的实现方法
- Shell脚本定义变量和重新赋值
- 深入理解C++编程中的局部变量和全局变量
- C#语法相比其它语言比较独特的地方(三)
- php中动态变量用法实例
- PHP中判断变量为空的几种方法分享
- PHP 第三节 变量介绍