- Linux Shell编程
- 1. 概述
- 1.1 Shell脚本(Shell script)
- 1.2 Shell编程入门实例
- 1.3 运行Shell脚本的几种方法
- 2. Shell变量
- 2.1 变量定义和访问
- 1. 变量的定义
- 三种定义变量的方式
- 2. 变量的访问
- 3. 引号的使用
- 4. 命令替换
- 2.2 变量类型
- 1. 变量值输出
- echo输出
- 2. 变量值输入
- 3. 数组
- 3.表达式与运算符
- 3.1 算术表达式
- 3.2 逻辑表达式
- 4. Shell控制结构
- 4.1 分支结构
- 4.2 循环结构:
- 4.3 函数结构
- 函数的定义
- 定义及变体
- 函数调用与参数传递
- 获取Shell函数返回结果的方法一般有如下三种。
- 4.4 Shell高阶
- 1. 数值比较运算符
- 2. 逻辑运算符
- 3. 字符串检测和比较运算符
- 4. 文件测试运算符
shell编程就是对一堆Linux命令的逻辑化处理!
1.1 Shell脚本(Shell script)-
基于Shell语言的语法规则编写而成,支持Linux/UNIX下的命令的调用。
-
Shell语言是一种解释型语言
-
不需要经过编译、汇编等过程。
-
Shell脚本扩展名为 “*.sh”。
-
本身是一个文本文件
Bash是Ubuntu下默认的Shell解释程序。
1.2 Shell编程入门实例进入Linux根目录,使用touch hello.sh创建一个名为hello.sh的shell脚本
使用vi命令打开该文件,输入如下代码并保存退出:
#!/bin/bash #第一个shell小程序 echo hello world!
第一行比较特殊,#! 后面跟的是解释器的路径(shell本身就是一种解释型语言),解释器的路径是/bin/bash。一般都会以#!开始来指定使用的shell类型,除了bash shell以外,还有很多版本的shell, 例如zsh、dash等等…不过bash shell还是我们使用最多的。
第二行以#符号开始,表示本行是注释。
第三行中的echo是linux中的输出命令,该行的意思就是输出hello world!
1.3 运行Shell脚本的几种方法方法1:为Shell脚本添加可执行权限
使用chmod命令赋予该脚本可执行的权限,然后再执行:
john@yu:~/shell$ chmod +x test01.sh #给脚本添加运行权限 john@yu:~/shell$ ./test01.sh #运行脚本文件,注意./不能省略 john@yu:~/shell$ /home/yu/shell/test01.sh #通过绝对路径的方式运行脚本文件
方法2:直接使用bash或sh来执行Shell脚本。
john@yu:~/shell$ bash test01.sh #使用Bash运行shell脚本 john@yu:~/shell$ sh test01.sh #使用sh运行Shell脚本
方法3:使用source 命令执行Shell脚本。
john@yu:~/shell$ source test01.sh #使用source运行shell脚本 john@yu:~/shell$ . test01.sh #使用点号.运行shell脚本2. Shell变量 2.1 变量定义和访问 1. 变量的定义
-
变量名=变量值
-
注意,等号两边不能有空格。
VariableName=Variablevalue VariableName='Variablevalue' VariableName="Variablevalue"
-
如果Variablevalue不包含任何空白符(例如空格、Tab缩进等),那么可以不使用引号;
-
如果 Variablevalue包含了空白符,那么就必须使用引号包围起来。
-
要获取一个变量的值,只需在变量名前面加一个 $。
-
已定义的变量,可以被重新赋值。
-
注意,对变量重新赋值时,不能在变量名前加$。
-
单引号:即使单引号里面有变量和命令也会把它们原样输出。
-
双引号:先解析里面的变量和命令。
-
反引号:反引号(``)位于 Esc 键的下方。反引号主要用于命令替换。
-
第一种方式是把命令用反引号
-
第二种方式把命令用 $() 包围起来。(并不是每一种Shell解释器都支持)
- 用户变量
- 环境变量
- 内置变量
shell编程中有两种变量,一种是我们自己定义的变量(自定义变量),第二种是Linux已定义的环境变量(如 PATH,HOME等等……)这类变量我们可以直接使用。
#!/bin/bash #使用环境变量 echo $PATH #自定义变量hello hello="hello world" echo $hello
定义变量的时候,“=”左右不能有空格。
1. 变量值输出- echo输出
- -e:识别输出内容里面的转义字符;
- -n:忽略结尾的换行。
-
printf输出
-
换行需要自己加“n”
read [参数] [变量名]
-
read -s -p “Enter Password:” password
-
echo -e “nThe password your input is:$password”
-
数组定义
-
读取数组元素值
bash本身并不支持数学运算。
-
通过expr命令
-
操作数(用于计算的数)和运算符之间一定要有空格
val=`expr 100 / 2` val=`expr 100/2` #此时输出的并不是运算结果。
- 使用$[]表达式
echo $[100/2] #不要求有空格3.2 逻辑表达式
-
test命令
test 逻辑表达式
-
左方括号
[ 逻辑表达式 ] # 逻辑表达式两边必须有空格
Condition中需要包含的逻辑表达式指定运算命令。实践中,一般可以使用 “(())”或者“[]” 来计算逻辑表达式的值。
while 语句
until 语句
4.3 函数结构 函数的定义 定义及变体return与其他语言中的用法不一样,详见“9.5.3函数的返回值”
函数调用与参数传递-
其一,不传递参数:
函数名
-
其二,传递参数。函数名字后接参数列表,参数之间以空格分隔。
函数名 参数1 参数2 …… 参数n
-
$1 表示第一个参数,
-
$2 表示第二个参数
-
$#获取传递的参数的个数;
-
通过 @ 或 者 @或者 @或者*一次性获取所有的参数。
-
-
其一,直接从函数内部输出数据。
例如,前两节的例子中,我们都是使用echo命令直接从函数内部输出结果。
-
其二,使用全局变量。
首先定义全局变量,在函数中将计算结果赋给全局变量,然后脚本中其他位置,通过访问全局变量,可以获得相应的计算结果。Shell函数中定义的变量默认是全局变量,函数与其所在脚本共享该全局变量。可使用local关键词定义局部变量。
-
其三,使用内置变量。
通过 ? 这 一 个 特 殊 的 内 置 变 量 , 可 用 于 获 取 上 一 个 命 令 执 行 后 的 返 回 结 果 。 因 而 在 函 数 调 用 后 , 可 以 使 用 ?这一个特殊的内置变量,可用于获取上一个命令执行后的返回结果。因而在函数调用后,可以使用 ?这一个特殊的内置变量,可用于获取上一个命令执行后的返回结果。因而在函数调用后,可以使用?来接收函数函数返回结果。



