设为首页 收藏本站
查看: 605|回复: 0

9-13 shell工作原理和编程中知识点总结

[复制链接]

尚未签到

发表于 2018-8-29 06:22:13 | 显示全部楼层 |阅读模式
  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:值
[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 [n]
  注意:脚本中任何位置执行了exit命令即会终止当前shell进程



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-557857-1-1.html 上篇帖子: [9-13]Shell系列5——条件测试和运算符 下篇帖子: linux下shell编程基础
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表