Shell编程1
Shell既是命令解释程序,又是一种高级程序设计语言。Shell是解释型语言。
Shell环境变量
用户可以在初始文件/etc/profie和/etc/csh.cshrc中进行修改。
部分Bash环境变量
| 环境变量名 | 含义 |
|---|---|
| CDPATH | cd命令访问的目录别名 |
| EDITOR | 用户在程序中使用的默认的编辑器 |
| ENV | Linux查找配置文件的路径 |
| HOME | 主目录的名字 |
| PATH | 存放搜索命令或者程序的所有目录 |
| PS1 | Shell提示符 |
| PS2 | Shell的二级提示符 |
| PWD | 当前工作目录的名字 |
| TERM | 用户使用的控制台终端的类型 |
- Shell元字符
| 元字符 | 功能 |
|---|---|
| 回车换行 | 输入命令要按回车键 |
| 空格 | 分隔符 |
| TAB | 命令行中的分隔符 |
| # | 注释行 |
| " | 引用多个字符并允许替换 |
| ’ | 引用多个字符,括号中字符按愿意解释 |
| $ | 表示一行的结束,或引用变量时引用 |
| & | 使命令在后台执行 |
| () | 在子Shell中执行命令 |
| [] | 匹配[]中一个字符 |
| {} | 在当前Shell中执行命令,或实现扩展 |
| * | 匹配0个或者多个字符 |
| ? | 匹配单个字符 |
| ^ | 紧跟^后面的字符开始的行,或作为否定符号 |
| | | 管道符 |
| ; | 顺序执行分隔符 |
| < | 输入重定向符号 |
| > | 输出重定向符号 |
| / | 用作根目录或者路径名中的分隔符 |
| | 转义字符;转移回车换行符;或作为续航符 | |
| ! | 启动历史纪录列表中的命令和当前命令 |
| % | 指定一个作业号时作为起始字符 |
| ~ | 表示主目录 |

我们看这段代码可以知道,当多个命令在一个命令行上面时,要用分号隔开。当字符串跨行时要在上一行的结尾处添加反斜杠。
Bash脚本的建立
编写Bash脚本程序有两种方式
- 直接输入一些列命令让Bash交互的执行他们。
- 也可以把这些命令保存在一个文件中,然后将该文件作为一个程序调用。

#!字符告诉系统同一行上紧跟在它后面的那个参数是用来执行本文件程序。
建立可执行的二进制程序

执行Shell
- 方法一

- 方法二

- 方法三

在此方法中相当于将此程序添加到了/bin整个环境变量中。
例题
编写一个Shell程序,此程序的功能是:显示root下的文件信息,然后建立一个名为kk文件夹,在此文件夹下新建一个文件aa,修改此文件的权限为可执行。



Shell程序中的位置参数
对于参数这个名词我们第一时间想到的是 变量之间的传参。在Linux中变量无需声明,并且默认情况下以字符串的格式来储存.
- 位置参数 位置参数是由系统提供的参数。
| 位置参数 及内部参数 |
说明 | 读写特性 |
|---|---|---|
| $0 | Shell脚本文件的名字 | 只读 |
| $1——$9 | 命令行参数1-9的值 | 只读 |
| $* | 命令行中所有参数,如果$*被引号“”包括,即"$*",之各个参数之间用环境变量IFS中的第一个字符分隔开 | 只读 |
| $@ | 命令行中所有的参数,它是$*的一种的变体。如果$@被引号包括,即“$@”,指他不用使用IFS环境变量,所以当IFS为空时,参数的值不会结合在一起。这就是两者之间的差别,其他时候等价 | 只读 |
| $# | 命令行参数的总个数 | 只读 |
| $$ | Shell脚本进程的ID号 | 只读 |
| $? | 最近一次命令的退出状态 | 只读 |
| $! | 最近一次后台进程的ID号 | 只读 |
例题
编写一个Shell程序,用于描述Shell程序中的位置参数$0,$#,$?,$*,程序名为Shell23,代码如下:

运行程序

运行结果

命令 shif[N]
功能:把命令行参数向左移动N个位置。

运行程序:

运行结果:

由程序可知:
当运行程序中有shift命令时,参数左移。若含有参数时,左移数目为参数个数。
位置参数的设置
set [options] argnument-list
使用argument-list中的值来设置位置参数,标志,选项。
变量的声明与赋值
declare [options] [name=[value]] //第一种格式
typeset [options] [name=[value]] //第二种格式
options:
-a:声明name是一个数组
-f:声明name是一个函数
-i:声明一个name变量为整数
-x:表示每一个name变量可以被子进程访问到,成为全局变量
-r:声明"name"是一个只读的变量


单引号 双引号 和反斜线的使用

命令替换
当一个命令被包含在括号里并在括号前加$符号时,或者被包括在反引号力时,Shell把它替换成这个命令的输出结果。


变量的输入
使用read命令来将用户的输入赋值给一个Shell变量。这个命令需要一个参数,即输入数据的变量名!
格式:
read [options] variable-list
options:
-a name 把词读入name数组中
-e 把一整行读入第一个变量中,其余的变量均为null
-n 在echo输入命令字符串后面,光标仍然停留在同一行。
-p prompt 如果是终端读入数据则显示prompt字符串。
例题
编写一个Shell程序,程序执行时从键盘读入一个目录名,然后显示这个目录下所有文件的信息。
代码:

运行结果:

posted on 2019-09-17 15:42 一颗小白杨站在哨所旁 阅读(271) 评论(0) 收藏 举报
浙公网安备 33010602011771号