一、进程:python
shell应用程序的进程通常为交互式的,在广义上分为GUI和CLI算法
GUI(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操做用户界面,支持鼠标,桌面等外设,比较著名的windows、Androidshell
CLI(command-line interface,命令行界面)是指可在用户提示符下键入可执行指令的界面,它一般不支持鼠标,用户经过键盘输入指令,计算机接收到指令后,予以执行。编程
CLI的词法通常由 命令,选项,参数组成,分为内建命令和外部命令windows
二、执行方式:数组
因为Linux的脚本或程序源文件通常为文本文件,因此在执行Linux脚本的时候通常分为两种方式:bash
①编译执行:预处理-->编译-->汇编-->连接-->二进制程序文件或可执行文件。表明有:C, C++数据结构
②解释执行:由解释器全程参与运行过程,每次读取一行,运行一行。表明有:Python和bashssh
Python:通常有写好的编程库,用户经过写程序控制结构,调用编程库完成程序编写;ide
库文件:通常为功能模块,在编程中可直接调用也能够经过其API进行调用。
Bash:须要从零开始编写,也是程序控制结构,可是须要调用机器上命令程序文件进行程序编 写;
外部命令:通常由各应用程序提供;
三、程序:通常为为达到某种用户的目的而编写的指令和数据或算法和数据的集合
根据侧重点不一样能够分为过程式编程和对象式编程:
过程式编程:以指令为中心,设计算法,数据服务于算法;
对象式编程:以数据为中心,设计数据结构(类),程序服务于数据结构;
bash 根据不一样状况能够将bash编程按执行类别分为三类: 顺序执行:逐个执行 选择执行:只执行其中一个分支 if...fi,if...elif...else...fi 循环执行:一段代码要执行0,1或多遍 while,if...elif...else...fi
bash的编程元素:变量、流程、函数
①变量:根据不一样状况能够分为 本地变量、环境变量、局部变量、位置参数变量以及特殊变量(内置变量)
变量的命名规则:只能包含数字、字母和下划线;且不能以数字开头;
引用变量:${name}, $name
变量的引用:
弱引用: "", 其内部的变量引用会被替换为变量值;
强引用:'',其变量的变量引用会保持原有字符;
命令引用:`COMMAND`, $(COMMAND),引用命令的执行结果;
声明为整型:
declare -i name=[value] -i:整型变量
let name=value
查看全部变量:set
销毁:
自动销毁:shell进程终止;
手动销毁:unset name
bash的变量使用特色:弱类型、无须事先声明;
本地变量:在用户如今的shell生命期的脚本中使用,只在用户当前shell生命期有意义。若是在shell 中启动另外一个进程或退出,此值将无效。这个方法的优势就是用户不能对其余的shell或进 程设置此变量有效。
设置一本地变量,格式为:
$ variable-name=value 或 $ {variable-name=value}
variable-name:变量名
=:赋值符号
value:变量值
注意:等号两边能够有空格。若是取值包含空格,必须用双引号括起来。shell变量能够用大小写字母 ,使用变量时,若是用花括号将之括起来,能够防止shell误解变量值。(具体见内容一)
环境变量:被“导出”的本地变量,能够在全部的用户进程中使用。登陆进程是父进程,shell进程是 子进程。父进程初始化环境变量,子进程就均可以使用了。
环境变量的配置文件
/etc/profile(做用于全部用户) or /home/user/.bash_profile(做用于user用户)
变量声明的命令:
export name=[value]
declare -x name[=value] -x:环境变量
查看全部环境变量:env, printenv, export
销毁:unset name (具体见内容二)
局部变量:被限定在建立它们的shell中。local函数能够用来建立局部变量,但仅限于函数内使用。 局部变量能够经过简单的赋予它一个值或一个变量名来设置,用declare内置函数来设置, 或者省略也可,某个函数执行过程;
declare 变量名=值
位置参数变量:在脚本中引用传递给脚本的参数;在函数中引用传递给函数的参数;参数相关数目传入脚本,此数目能够任意多,但只有前9个能够被访问,使用shift命令能够改变这个限制;参数从第一个开始,在第九个结束;每一个访问参数前要加$符号;第一个参数为0,表示预留保存实际脚本名字;不管脚本是否有参数,此值都可用.
$0:脚本名字。此变量包含地址,可使用basename $0得到脚本名称。
$1:第一个参数
$2,$3,$4,$5,...一次类推。
特殊变量:$?, $*, $@, $#, $$,$-,$!
特定shell变量以下:
$# 传递到脚本的参数个数;
$* 以一个单字符串显示全部向脚本传递的参数。与位置变量不一样,此选项参数可超过9个;
$$ 脚本运行的当前进程ID号;
$! 后台运行的最后一个进程的进程ID号;
$@ 与$*相同,可是使用时加引号,并在引号中返回每一个参数;
$- 显示shell使用的当前选项,与set命令功能相同;
$? 显示最后命令的退出状态.0表示没有错误,其余任何值代表有错误;
[root@iZ28qzns9m4Z ~]# echo $$ 31253 [root@iZ28qzns9m4Z ~]# echo $- himBH [root@iZ28qzns9m4Z ~]# echo $? 0
内容一: [root@iZ28qzns9m4Z ~]# name=nicai #设定本地变量 [root@iZ28qzns9m4Z ~]# echo $name #打印输出 nicai [root@iZ28qzns9m4Z ~]# bash #进入下一级本地变量 [root@iZ28qzns9m4Z ~]# echo $name [root@iZ28qzns9m4Z ~]# exit exit [root@iZ28qzns9m4Z ~]# echo $name nicai [root@iZ28qzns9m4Z ~]# [root@iZ28qzns9m4Z ~]# pstree systemd─┬─AliHids───9*[{AliHids}] ├─AliYunDun───8*[{AliYunDun}] ├─AliYunDunUpdate───6*[{AliYunDunUpdate}] ├─agetty ├─crond ├─dbus-daemon ├─gshelld───3*[{gshelld}] ├─iprdump ├─iprinit ├─iprupdate ├─lvmetad ├─nscd───7*[{nscd}] ├─ntpd ├─rsyslogd───2*[{rsyslogd}] ├─sshd───sshd───bash───pstree #有内容的本地变量 ├─systemd-journal ├─systemd-logind └─systemd-udevd [root@iZ28qzns9m4Z ~]# bash [root@iZ28qzns9m4Z ~]# pstree systemd─┬─AliHids───9*[{AliHids}] ├─AliYunDun───8*[{AliYunDun}] ├─AliYunDunUpdate───6*[{AliYunDunUpdate}] ├─agetty ├─crond ├─dbus-daemon ├─gshelld───3*[{gshelld}] ├─iprdump ├─iprinit ├─iprupdate ├─lvmetad ├─nscd───7*[{nscd}] ├─ntpd ├─rsyslogd───2*[{rsyslogd}] ├─sshd───sshd───bash───bash───pstree ├─systemd-journal ├─systemd-logind └─systemd-udevd [root@iZ28qzns9m4Z ~]#
内容二: [root@iZ28qzns9m4Z ~]# name=nicai #本地变量 [root@iZ28qzns9m4Z ~]# echo $name nicai [root@iZ28qzns9m4Z ~]# bash [root@iZ28qzns9m4Z ~]# echo $name [root@iZ28qzns9m4Z ~]# exit exit [root@iZ28qzns9m4Z ~]# echo $name nicai [root@iZ28qzns9m4Z ~]# export name[=aaa] -bash: export: `name[=aaa]': not a valid identifier [root@iZ28qzns9m4Z ~]# export name=[aaa] #环境变量 [root@iZ28qzns9m4Z ~]# echo $name [aaa] [root@iZ28qzns9m4Z ~]# bash [root@iZ28qzns9m4Z ~]# echo $name [aaa] [root@iZ28qzns9m4Z ~]# [root@iZ28qzns9m4Z ~]# env XDG_SESSION_ID=466 HOSTNAME=iZ28qzns9m4Z SHELL=/bin/bash TERM=xterm HISTSIZE=1000 SSH_CLIENT=61.182.229.120 60276 22 SSH_TTY=/dev/pts/0 USER=root name=[bbb] ... [root@iZ28qzns9m4Z ~]# unset name [root@iZ28qzns9m4Z ~]# echo $name [root@iZ28qzns9m4Z ~]#