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

日期: 2015年09月13日



shell、变量的概念



What is SHELL?

<<========================================SHELL========================================>>





shell:是一个交互式进程,用户通过shell与内核进行交互工作


广义上的shell分为两类:

GUI:Graphic UI 即是图形界面的用户接口,常见的GUI有

Gnome

KDE

Xfce


CLI:Command Lie Interface 即是命令行接口,常见的CLI有

bsh(作者:Boarn, 又称为bsh)

csh

tcsh

ksh

bash(Boarn again shell)==>Bsh的再次发行版

zsh



查看系统支持的SHELL列表: cat/etc/shells

查看当前使用的shell:echo $SHELL




shll也称为命令解释器,它接收到用户输入的命令后先进行词法分析

如:哪些是命令本身,哪些是命令的选项和参数等……

然后再传递给内核处理,再把内核处理的结果输出到屏幕返回给用户


大多数Linux发行版默认shell为bash

Bash是一种解释型语言,但它也提供了交互式接口,支持变量,因此提供了编程环境,

所以可以称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

 

示例:分别演示两种生成环境变量的方法

wKioL1X29gGiIKzZAAE8dgo8AB0519.jpg

 

局部变量:某个函数执行过程,仅对局部代码生效

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"的临时文件名.

 

示例:

wKioL1X29hSxNGDkAABhdDhlYTA035.jpg

 

 

变量类型:

限定了数据的存储格式和数据的表示范围主要有

数值型:

整数、浮点数

 

文本型:

字符

 

bash中如何引用变量:

''  强引用,变量替换不会进行

"" 弱引用,能够执行变量替换

` 命令替换,引用命令的执行结果;命令替换的另外一符号:$(命令);

 

命令替换: $(COMMAND), 反引号:`COMMAND`

把命令中某个子命令替换为其执行结果的过程

echo "the current directory is /etc/sysconfig."

echo "the current directory is $(pwd)."

 

示例:

wKiom1X28-3zwU_-AADDr9DufYw960.jpg

 

 

变量替换:

引用变量进行替换的标准形式为:${VAR_NAME},这里的花括号{}通常可以被省略。

变量替换还有一些其他的形式,可以应用于不同的场景:

${VAR_NAME:=word} 如果变量已经被赋值了,则显示原来的值,如果变量是空,则这里冒号后面的值不仅作为默认值,并且会保存在变量中。

 

示例:

wKiom1X29A6jLy9uAACYPEbBygc666.jpg


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

 

示例:

wKioL1X29kKzW3LeAAB62ijOp_0793.jpg

    

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

 

示例:

wKiom1X29A7CP977AACo16oLC9c143.jpg

 

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

 

示例:

wKioL1X29kLgJz_AAACO1fpRo0o777.jpg



如何查看shell中的变量:

查看所有变量:set

查看所有环境变量:env, printenv, export

 

 

 

What is shell Script

<<======================================SHELL脚本】======================================>>

 

shell脚本:

shell脚本语言是弱类型语言

shell脚本是文本文件,简单说,脚本就是数条可执行语句的罗列。

 

运行脚本,事实上是运行一个bash进程,此进程负责从脚本文件中读取一个执行逻辑

 

 

 

执行脚本的几种方式:

1、bash scripts-name 或 sh scripts-name

2、PATH/script-name 或 cd到脚本所在目录 ./script-name

3、source script-name 或 .script-name

(用此方式执行可以把脚本中的变量和函数导入到当前shell中)

/etc/init.d/functions 函数:action




shebang:

几乎每一个可执行程序的初始位置都有一个 magic number(魔数),用来标识本程序的格式。

Linux上编译的程序无法在Windows上执行,是因为ABIApplication BinaryInterface:应用程序二进制接口)不兼容。通常在Linux上编译的程序采用的是ELF格式,使用file命令可查看文件的类型:

wKiom1X29OWAJuVVAABnH-ogmpg897.jpg

 

因此,shell脚本也需要指定具体的解释器,否则无法确定用什么解释器,从而会导致无法执行。

在编写脚本时,第一行会用来指定执行该脚本的解释器,增加的这一行在脚本语言中称为 shebang。

目的为告诉内核是否可以执行下面的内容。

wKioL1X29yiRKr9kAABkuUTsgpM371.jpg




shell脚本规范:

1、开头:shebang

2、版权等注释信息:

#Date

#Author

#Mial

#Function

#version

3、脚本中不要用中文注释

4、脚本文件以.sh为后缀

5、成对的符号和流程控制语句一次书写完,再添加内容,避免遗漏

6、通过缩进让代码易读




在面向过程的编程语言中,语言控制结构主要有以下三种:

顺序执行:默认法则,逐条执行各语句;

选择执行:分支,条件判断,符合条件的分支予以执行;不符合则略过;

循环执行:将同一段代码反复执行有限次,所以,循环必须有退出条件,否则将陷入死循环;



你可能感兴趣的:(shell,变量,shell脚本)