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

shell简介及变量、脚本相关概念

2015-09-15 00:15 561 查看
日期: 2015年09月13日

shell、变量的概念

What is SHELL?
<<========================================【SHELL】========================================>>



shell:是一个交互式进程,用户通过shell与内核进行交互工作
广义上的shell分为两类:GUI:Graphic UI 即是图形界面的用户接口,常见的GUI有GnomeKDEXfce
CLI:Command Lie Interface 即是命令行接口,常见的CLI有bsh(作者:Boarn, 又称为bsh)cshtcshkshbash(Boarn again shell)==>Bsh的再次发行版zsh

查看系统支持的SHELL列表: cat/etc/shells查看当前使用的shell:echo $SHELL


shll也称为命令解释器,它接收到用户输入的命令后先进行词法分析如:哪些是命令本身,哪些是命令的选项和参数等……然后再传递给内核处理,再把内核处理的结果输出到屏幕返回给用户
大多数Linux发行版默认shell为bashBash是一种解释型语言,但它也提供了交互式接口,支持变量,因此提供了编程环境,所以可以称bash为程序语言。解释型语言属于弱类型语言,其特点为:1.它不强制区分变量类型,即无论存储什么数据,默认均以字符格式(ASCII码)存储。2.不需要事先声明变量,需要时直接使用,直接赋值;

What is VARIABLE?
<<========================================【变量】========================================>>

变量:变量事实上是一块命名的内存空间,可用于存储数据,且空间可以按需改变。
使用变量的通常步骤为:1.声明,指定变量的类型。声明的同时,通常会给其一个初始值,这个过程叫做变量的初始化2.赋值。变量的赋值用 = 表示,例如: A=10,

shell中的变量赋值:变量名=值★注意:变量在赋值时不能使用$; 变量名只能包含字母、数字和下划线,而且不能以数字开头; 变量名区别大小写;

bash变量种类:本地变量:作用范围是当前shell进程定义变量: [set]Var_Name="Value"引用变量: ${Var_Name}撤销变量: unset Var_Name 环境变量:作用范围是当前shell进程及其子进程直接生成变量为环境变量:export Var_Name="Value"先定义本地变量,再使用export命令导出为环境变量Var_Name="Value"export Var_Name 示例:分别演示两种生成环境变量的方法

局部变量:某个函数执行过程,仅对局部代码生效local Var_Name="Value" 位置参数变量:在脚本中引用传递给脚本的参数,在函数中引用传递给函数的参数$1, $2, $3...$n./script-name.sh 2 8$0: 表示当前执行的进程名,script 本身的名字,或者在正则表达式中表示整行输出$1: 传递给该shell脚本的第一个参数$2: 传递给该shell脚本的第二个参数$#: 位置参数的个数$@: 引用所有的位置参数,将所有的位置参数分别显示$*: 将所有的位置参数当做一个整体的字符串来显示 特殊变量:$?: 上一条命令的执行状态;状态用数字来表示:0-255;0: 成功1-255: 失败 (1、2、127 是系统预留的)$!: 在后台运行的最后的工作的PID(进程ID).$$: 脚本自身的进程ID.这个变量经常用来构造一个"unique"的临时文件名. 示例:

变量类型:限定了数据的存储格式和数据的表示范围主要有数值型:整数、浮点数 文本型:字符 bash中如何引用变量:'' 强引用,变量替换不会进行"" 弱引用,能够执行变量替换`` 命令替换,引用命令的执行结果;命令替换的另外一符号:$(命令); 命令替换: $(COMMAND), 反引号:`COMMAND`把命令中某个子命令替换为其执行结果的过程echo "the current directory is /etc/sysconfig."echo "the current directory is $(pwd)." 示例:

变量替换:引用变量进行替换的标准形式为:${VAR_NAME},这里的花括号{}通常可以被省略。变量替换还有一些其他的形式,可以应用于不同的场景:${VAR_NAME:=word} 如果变量已经被赋值了,则显示原来的值,如果变量是空,则这里冒号后面的值不仅作为默认值,并且会保存在变量中。 示例:



${VAR_NAME:?word} 如果变量已经被赋值了,则显示原来的值,如果变量是空,或没有声明变量,则问号?后面的值会定向至标准错误输出 示例:


${VAR_NAME:-word} 如果没有定义变量或变量的值为空,则变量名后面用使用冒号加一个值,该值会作为变量的默认值使用;如果变量已经被赋值了,则冒号后的默认值不会替换原有的值。 示例:

${VAR_NAME:+word} 如果变量没有声明或值为空,则不作任何操作;如果变量已经赋值了,则用加号+后面的值会替换原来赋的值(仅时临时替换,不保存至变量) 示例:



如何查看shell中的变量:查看所有变量:set查看所有环境变量:env, printenv, export What is shell Script<<======================================【SHELL脚本】======================================>> shell脚本:shell脚本语言是弱类型语言shell脚本是文本文件,简单说,脚本就是数条可执行语句的罗列。 运行脚本,事实上是运行一个bash进程,此进程负责从脚本文件中读取一个执行逻辑 执行脚本的几种方式:1、bash scripts-name 或 sh scripts-name2、PATH/script-name 或 cd到脚本所在目录 ./script-name3、source script-name 或 .script-name(用此方式执行可以把脚本中的变量和函数导入到当前shell中)/etc/init.d/functions 函数:action

shebang:几乎每一个可执行程序的初始位置都有一个 magic number(魔数),用来标识本程序的格式。Linux上编译的程序无法在Windows上执行,是因为ABI(Application BinaryInterface:应用程序二进制接口)不兼容。通常在Linux上编译的程序采用的是ELF格式,使用file命令可查看文件的类型:

因此,shell脚本也需要指定具体的解释器,否则无法确定用什么解释器,从而会导致无法执行。在编写脚本时,第一行会用来指定执行该脚本的解释器,增加的这一行在脚本语言中称为 shebang。目的为告诉内核是否可以执行下面的内容。



shell脚本规范:1、开头:shebang2、版权等注释信息:#Date#Author#Mial#Function#version3、脚本中不要用中文注释4、脚本文件以.sh为后缀5、成对的符号和流程控制语句一次书写完,再添加内容,避免遗漏6、通过缩进让代码易读

在面向过程的编程语言中,语言控制结构主要有以下三种:顺序执行:默认法则,逐条执行各语句;选择执行:分支,条件判断,符合条件的分支予以执行;不符合则略过;循环执行:将同一段代码反复执行有限次,所以,循环必须有退出条件,否则将陷入死循环;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: