Shell概述
Shell是一种具备特殊功能的程序,它提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令,并把它送入内核去执行。内核是Linux系统的心脏,从开机自检就驻留在计算机的内存中,直到计算机关闭为止,而用户的应用程序存储在计算机的硬盘上,仅当需要时才被调入内存。Shell是一种应用程序,当用户登录Linux系统时,Shell就会被调入内存去执行。Shell独立于内核,它是连接内核和应用程序的桥梁,并由输入设备读取命令,再将其转为计算机可以理解的机械码,Linux内核才能执行该命令。
优势
Shell脚本语言的好处是简单、易学、易用,适合处理文件和目录之类的对象,以简单的方式快速完成某些复杂的事情通常是创建脚本的重要原则,脚本语言的特性可以总结为以下几个方面:
语法和结构通常比较简单。
学习和使用通常比较简单,
通常以容易修改程序的“解释”作为运行方式,而不需要“编译。
程序的开发产能优于运行效能。
Shell脚本语言是Linux/Unix系统上一种重要的脚本语言,在Linux/Unix领域应用极为广泛,熟练掌握Shell脚本语言是一个优秀的Linux/Unix开发者和系统管理员必经之路。利用Shell脚本语言可以简洁地实现复杂的操作,而且Shell脚本程序往往可以在不同版本的Linux/Unix系统上通用。
Shell编程
基本格式
Shell脚本的文件名后缀通常是.sh (当然你也可以使用其他后缀或者没有后缀,.sh是为了规范)
程序编写格式:
[java] view plain copy#!/bin/bash
# 注释使用#号
代码示例:
[java] view plain copy//使用vi编辑器编写shell脚本(a.sh不存在则会新建)
vi a.sh
进入vi编辑模式后编写执行代码
[java] view plain copy//固定格式,记住就可以了
#!/bin/bash
//执行的代码
echo Hello World
赋予权限并执行:
[java] view plain copy//赋予可执行权限
chmod +x a.sh
//执行(调用/bin/bash执行a.sh脚本)
。/a.sh
执行结果:
下面是几种运行情况:
[java] view plain copya.sh
这样的话需要保证脚本具有执行权限并且在环境变量PATH中有(。),这样在执行的时候会先从当前目录查找。
[java] view plain copy./a.sh
只要保证这个脚本具有执行权限即可
[java] view plain copy/usr/local/a.sh
只要保证这个脚本具有执行权限即可
[java] view plain copybash a.sh
直接可以执行,甚至这个脚本文件中的第一行都可以不引入/bin/bash,它是将hello.sh作为参数传给bash命令来执行的。
[java] view plain copybash -x /path/to/aa.sh
bash的单步执行
[java] view plain copybash -n /path/to/aa.sh
bash语法检查
变量
变量不需要声明,初始化不需要指定类型
变量命名
1、只能使用数字,字母和下划线,且不能以数字开头
2、变量名区分大小写
3、建议命令要通俗易懂
注意:变量赋值是通过等号(=)进行赋值,在变量、等号和值之间不能出现空格。
显示变量值使用echo命令(类似于java中的system.out) ,加上$变量名,也可以使用${变量名}
例如:
[java] view plain copyecho $JAVA_HOME
echo ${JAVA_HOME}
变量的申明和使用:
变量分类:
Shell变量有这几类:本地变量、环境变量、局部变量、位置变量、特殊变量。
本地变量:
只对当前shell进程有效的,对当前进程的子进程和其它shell进程无效。
定义:VAR_NAME=VALUE
变量引用:${VAR_NAME} 或者 $VAR_NAME
取消变量:unset VAR_NAME
相当于java中的私有变量(private),只能当前类使用,子类和其他类都无法使用。
比如在一个bash命令窗口下再使用bash,则变成了子进程,本地变量不会被这个子进程所访问。
环境变量:
自定义的环境变量对当前shell进程及其子shell进程有效,对其它的shell进程无效
定义:export VAR_NAME=VALUE
对所有shell进程都有效需要配置到配置文件中
[java] view plain copyvi /etc/profile
source /etc/profile
相当于java中的protected修饰符,对当前类,子孙类,以及同一个包下面可以共用。
和windows中的环境变量比较类似
自定义的环境变量:
局部变量:
在函数中调用,函数执行结束,变量就会消失
对shell脚本中某代码片段有效
定义:local VAR_NAME=VALUE
相当于java代码中某一个方法中定义的局部变量,只对这个方法有效。
位置变量:
比如脚本中的参数:
$0:脚本自身
$1:脚本的第一个参数
$2:脚本的第二个参数
相当于java中main函数中的args参数,可以获取外部参数。
特殊变量:
$?:接收上一条命令的返回状态码
返回状态码在0-255之间
$#:参数个数
$*:或者$@:所有的参数
$$:获取当前shell的进程号(PID)(可以实现脚本自杀)(或者使用exit命令直接退出也可以使用exit [num])
引号
Shell编程中有三类引号:单引号、双引号、反引号。
‘’单引号不解析变量
[java] view plain copyecho ‘$name’
“”双引号会解析变量
[java] view plain copyecho “$name”
``反引号是执行并引用一个命令的执行结果,类似于$(。。。)
[java] view plain copyecho `$name`
示例:
技术专区
- mybatis动态sql详解
- 用VHDL语言设计数据传输系统中的HDB3编码器
- 裸机程序如何驱动硬件?看前辈是怎么说的
- 应用面向对象编程SoC原则的典型示例
- 嵌入式开发之java常用开发工具介绍