Linux学习笔记(4)——Shell编程(1)
Shell是一个用C语言编写的程序它是用户使用Linux的桥梁。Shell既是一种命令语言,又是程序设计语言。Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Windows Explorer是一个典型的图形界面Shell。
1.Shell脚本
Shell脚本(shell script)是一种为shell编写的脚本程序。业界所说的shell通常都是指shell脚本,但大家要知道,shell和 shell script是两个不同的概念。由于习惯,此处所指“shell编程”一律指shell脚本编程,不是指开发shell本身。
2.Shell环境
Shell编程跟java、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以。
Linux的Shell种类很多,常见的有:
- Bourne Shell (/usr/bin/sh 或 /bin/sh)
- C Shell (/usr/bin/csh)
- K Shell (/usr/bin/ksh)
- Shell for Root (/sbin/sh)
……….
此处使用的是Bash 即 Bourne Again Shell ,由于易用和免费,Bash在日常工作中被广泛使用。同时,Bash也是大多数Linux系统默认的Shell。
在一般情况下,人们并不区分Bourne Again Shell和Bourne Shell,所以,#!/bin/sh,同样也可以改为#!/bin/bash
其中:#! 告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序。
3.第一个shell脚本
打开文本编辑器(可以使用vi/vim命令创建文件),新建一个文件test.sh 扩展名为sh代表shell,不过扩展名并不影响脚本执行,只是为了见名知意。
在text目录下创建test1.sh文件、回车 进入vim编辑器、按i 进入进入输入模式。输入代码:
注:“#!”是一个约定标记,目的是告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。echo命令用于向窗口输入文本。
4.运行shell脚本的两种方法
(1)作为可执行程序
#使脚本具有执行权限
#执行脚本
注:一定要写成./test1.sh,而不是test1.sh,运行其它二进制的程序也一样,直接写test1.sh,Linux系统会去PATH里寻找有没有叫test1.sh的可执行文件,但是只要/bin,/sbin,/usr/bin,/usr/sbin等在PATH里,而现在所使用的当前目录通常都不再PATH里,所以写成test1.sh会找不到命令!所以要用./test1.sh告诉系统,就在当前目录里面寻找。
(2)作为解释器参数
这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名。
这种方式运行脚本,不需要在第一行指定解释器信息。
即,文件中不需要再写#!/bin/sh 文件内容为:
5.Shell
shell变量:
定义变量时,变量名不加美元符号“$”,变量名和等号之间不能有空格。
变量名的命名需要遵循的规则:
- 首字符必须为字母;
- 中间不能有空格,可以使用下划线;
- 不能使用标点符号
- 不能使用bash里的关键字
例:
#定义变量
#使用变量 在变量前加$符即可。
注:变量名外的花括号是为了帮助解释器识别变量边界。(可写可不写)
字符串:
可以用单引号,也可以使用双引号。
单引号
单引号字符串限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量时无效的;
- 单引号中不能出现单引号,使用转义字符也不行。
双引号
#编辑
#执行
双引号优点:
- 双引号里可以有变量;
- 双引号里可以出现转义字符。
字符串拼接:
#编辑
#执行
数组:
bash支持一维数组(不支持多维数组) 且没有限制数组的大小。
数组元素的下标由0开始编号。
定义数组:
数组名=(值1 值2…….值n)
例如:
#读取数组元素和获取数组所有元素
#执行结果
获取数组长度:
#执行结果
Shell注释:
以“#”开头就是注释,会被解释器忽略。Sh中没有多行注释,只能每行加一个#