Shell编程详解

Shell是一种具备特殊功能的程序,它提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令,并把它送入内核去执行。内核是 Linux 系统的心脏,从开机自检就驻留在计算机的内存中,直到计算机关闭为止,而用户的应用程序存储在计算机的硬盘上,仅当需要时才被调入内存。Shell是一种应用程序,当用户登录 linux 系统时,Shell就会被调入内存去执行。Shell独立于内核,它是连接内核和应用程序的桥梁,并由输入设备读取命令,再将其转为计算机可以理解的机械码,Linux内核才能执行该命令。


 

 


优势

Shell脚本语言的好处是简单、易学、易用,适合处理文件和目录之类的对象,以简单的方式快速完成某些复杂的事情通常是创建脚本的重要原则,脚本语言的特性可以总结为以下几个方面:

  1. 语法和结构通常比较简单。
  2. 学习和使用通常比较简单,
  3. 通常以容易修改程序的“解释”作为运行方式,而不需要“编译。
  4. 程序的开发产能优于运行效能。

Shell脚本语言是Linux/Unix系统上一种重要的脚本语言,在Linux/Unix领域应用极为广泛,熟练掌握Shell脚本语言是一个优秀的Linux/Unix开发者和系统管理员必经之路。利用Shell脚本语言可以简洁地实现复杂的操作,而且Shell脚本程序往往可以在不同版本的Linux/Unix系统上通用。

 

 

Shell脚本的文件名后缀通常是.sh (当然你也可以使用其他后缀或者没有后缀,.sh是为了规范) 

程序编写格式:

[java]  view plain   copy
  1. #!/bin/bash  
  2. #  注释使用#号   

代码示例: 

[java]  view plain   copy
  1. //使用vi编辑器编写shell脚本(a.sh不存在则会新建)  
  2. vi a.sh  

进入vi编辑模式后编写执行代码

[java]  view plain   copy
  1. //固定格式,记住就可以了  
  2. #!/bin/bash  
  3. //执行的代码  
  4. echo Hello World  

赋予权限并执行:

[java]  view plain   copy
  1. //赋予可执行权限  
  2. chmod +x a.sh  
  3. //执行(调用/bin/bash执行a.sh脚本)  
  4. ./a.sh  

执行结果:

 

 

下面是几种运行情况:

[java]  view plain   copy
  1. a.sh  

这样的话需要保证脚本具有执行权限并且在环境变量PATH中有(.),这样在执行的时候会先从当前目录查找。

 


[java]  view plain   copy
  1. ./a.sh  

只要保证这个脚本具有执行权限即可

 

[java]  view plain   copy
  1. /usr/local/a.sh  
只要保证这个脚本具有执行权限即可

 

[java]  view plain   copy
  1. bash a.sh  
直接可以执行,甚至这个脚本文件中的第一行都可以不引入/bin/bash,它是将hello.sh作为参数传给bash命令来执行的。

 

[java]  view plain   copy
  1. bash -x /path/to/aa.sh  
bash的单步执行

 

[java]  view plain   copy
  1. bash -n /path/to/aa.sh  

bash语法检查


变量不需要声明,初始化不需要指定类型

变量命名

1、只能使用数字,字母和下划线,且不能以数字开头

2、变量名区分大小写

3、建议命令要通俗易懂

 

注意:变量赋值是通过等号(=)进行赋值,在变量、等号和值之间不能出现空格。

 

显示变量值使用echo命令(类似于Java中的system.out) ,加上$变量名,也可以使用${变量名}

例如:

[java]  view plain   copy
  1. echo $JAVA_HOME     
  2. echo ${JAVA_HOME}  

变量的申明和使用:

 

 

 

变量分类:

 

Shell变量有这几类:本地变量、环境变量、局部变量、位置变量、特殊变量。

 

本地变量:

  1. 只对当前shell进程有效的,对当前进程的子进程和其它shell进程无效。
  2. 定义:VAR_NAME=VALUE
  3. 变量引用:${VAR_NAME} 或者 $VAR_NAME
  4. 取消变量:unset VAR_NAME
  5. 相当于java中的私有变量(private),只能当前类使用,子类和其他类都无法使用。

比如在一个bash命令窗口下再使用bash,则变成了子进程,本地变量不会被这个子进程所访问。

 

 

 

环境变量:

自定义的环境变量对当前shell进程及其子shell进程有效,对其它的shell进程无效

定义:export VAR_NAME=VALUE

对所有shell进程都有效需要配置到配置文件中

[java]  view plain   copy
  1. vi /etc/profile  
  2. source /etc/profile  

相当于java中的protected修饰符,对当前类,子孙类,以及同一个包下面可以共用。

和windows中的环境变量比较类似

 

自定义的环境变量:

 

 

 

局部变量:

  1. 在函数中调用,函数执行结束,变量就会消失
  2. 对shell脚本中某代码片段有效
  3. 定义:local VAR_NAME=VALUE
  4. 相当于java代码中某一个方法中定义的局部变量,只对这个方法有效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值