Shell初识
- Shell
- Shell 脚本
- Shell 环境
- 第一个shell脚本
- 实例
- 运行 Shell 脚本方法:
- 1、作为可执行程序
- 2、作为解释器参数
- 3.使用 . (空格)脚本名称来执行
- 4.使用 source 来执行(主要用于生效配置文件)
- 区别
- 1.关于执行权限
- 2.关于是否开启子shell线程
- 脚本排错及问题判断
- shell中的大括号、中括号、小括号的使用详解
- **shell中的小括号 "( )"的用法:**
- **shell中的中括号(也叫方括号) "[ ]"的用法**
- **大括号 {} :**
- 重定向与引号
- 重定向符号的用法
- 三种引号
- 数值运算的方法
- 算术运算符
- expr 的运用
- echo $[ ]和echo $(( ))
- let的运用
- 小数运算
- bc科学计算工具的运用
- **基本计算**
- **浮点数计算**
- **bc命令在bash脚本中的应用**
- 未完待续
Shell
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell 脚本
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
Shell 环境
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
第一个shell脚本
打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell)
输入一些代码,第一行一般是这样:
实例
#!/bin/bash*
echo "Hello World ! "
Hello World !
运行 Shell 脚本方法:
1)使用绝对路径执行。
2)使用相对路径执行。语法格式:./a.sh
3)使用 sh或bash命令来执行。语法格式: sh a.sh 不需要执行权限 -x参数(显示执行过程)
4)使用 . (空格)脚本名称来执行。 语法格式:. a.sh 不需要执行权限(特别注意:第一个.后面有空格)
5)使用 source 来执行。 语法格式:source a.sh 不需要执行权限(主要用于生效配置文件)
下面针对这5种方式,我们一起来看看它们的具体使用方式和区别吧!
1、作为可执行程序
将上面的代码保存为 test.sh,并 cd 到相应目录:
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
2、作为解释器参数
这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:
/bin/sh test.sh
bash test.sh
3.使用 . (空格)脚本名称来执行
. test.sh #注意,点后面有个空格
注:该方式,不需要单独添加x执行权限,它和source类似,权限继承与bash。
4.使用 source 来执行(主要用于生效配置文件)
source test.sh #该方式多用些操作,被修改后的配置文件(使之重新加载)
区别
1.关于执行权限
仅前两种(相对路径、绝对路径)方法,需要chmod +x test.sh,给脚本单独添加x执行权限。后三种方法,均不需要单独添加x执行权限。
2.关于是否开启子shell线程
前三种方法,脚本执行时会开启一个子shell环境,在子shell执行完后,子shell环境随即关闭,然后又回到当前shell中。
后面两种. 和source方式,则是在当前shell中执行,不会开启子shell。
脚本排错及问题判断
sh [-nvx] 脚本文件
选项与参数∶
-n:不执行脚本,仅查询语法的问题;
-v:在执行脚本前,先将脚本的内容输出到屏幕上;
-x:将使用到的脚本内容(执行过程)显示到屏幕上
shell中的大括号、中括号、小括号的使用详解
shell中的小括号 "( )"的用法:
() 子shell赋值
在子shell中变量var值为lookback,但是在上级shell中就不是这个值,可以看出是在子shell中有效的赋值
$()用法
用来执行一条命令
shell中的中括号(也叫方括号) "[ ]"的用法
在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号。
my_array=["value1" "value2" "value3"]
条件测试: 中括号用于条件测试,可以用于字符串比较、数值比较等。
bash 的内部命令,[和test是等同的。如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。if/test结构中的左中括号是调用test的命令标识,右中括号是关闭条件判断的。这个命令把它的参数作为比较表达式或者作为文件测试,并且根据比较的结果来返回一个退出状态码。if/test结构中并不是必须右中括号,但是新版的Bash中要求必须这样。
if [ condition ]; then
# commands
fi
大括号 {} :
代码块: 大括号可以用于创建代码块,将一组命令组合在一起。
{
command1
command2
}
扩展: 大括号还可以用于进行扩展,生成一系列字符串。
echo {1..5}
12345
文件重定向: 大括号还可以用于文件重定向。
{ command1; command2; } > output.txt
重定向与引号
重定向符号的用法
重定向符号用于控制命令的输入和输出方向,可以将命令的输出发送到文件、从文件读取输入、追加到文件等。
>
:将命令的输出重定向到文件,会覆盖文件的内容。
command > output.txt
>>
:将命令的输出追加到文件,不会覆盖文件的内容。
command >> output.txt
<
:从文件中读取输入并传递给命令。
command < input.txt
2>
: 重定向错误输出的运用
ls abc 2> output.txt
ls abc >output.txt 2>&1
- 混合输出
ls /opt /xxx &>5.txt
三种引号
- 单引号('):
单引号内的文本会被视为纯粹的字符串,不会对其中的特殊字符进行解释或替换。这意味着,
单引号中的变量引用、命令替换等都会被直接原样输出。
例如, ‘Hello $USER’ 会被直接解释为字符串"Hello $USER",而不会将‘USER`替换为当前
用户名。
单引号适用于保留字符串中的特殊字符的字面意义。 - 双引号("):
双引号内的文本会进行变量引用和命令替换。也就是说,双引号内的变量会被解释为其对应的
值,命令替换中的命令会被执行,并将结果嵌入到字符串中。
例如, “Hello $USER” 会被解释为"Hello"后跟当前用户名。
双引号适用于需要对字符串中的变量进行扩展或替换的情况。 - 反引号(`):
反引号用于命令替换,即将反引号中的命令执行,并将结果返回到外部命令中。
例如, date 会被替换为当前日期和时间。
在现代的Shell中,建议使用更加可读性更好的$(command) 语法来代替反引号。
数值运算的方法
算术运算符
下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | expr $a + $b 结果为 30。 |
- | 减法 | expr $a - $b 结果为 -10。 |
* | 乘法 | expr $a \* $b 结果为 200。 |
/ | 除法 | expr $b / $a 结果为 2。 |
% | 取余 | expr $b % $a 结果为 0。 |
= | 赋值 | a=$b 把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
expr 的运用
格式:expr 数值1 运算符 数值2 [运算符 数值3]…
echo $[ ]和echo $(( ))
格式:
echo $((数值 运算符 数值))
echo $[数值 运算符 数值]
let的运用
格式:let 变量=<数值>运算符<数值>
运算符与echo $[ ]相同
小数运算
bc科学计算工具的运用
Bash内置了对整数运算的支持,但是并不支持浮点运算,而 bc 计算器可以很方便的进行浮点运算。
- 支持交互式和非交互式两种方式。
- 使用scale=n可以指定精度(运算中包含除法才生效),即小数点后的位数。要写在算术表达式之前。
基本计算
bc命令的基本使用方法是在终端中直接输入表达式,然后按下回车键即可得到结果。比如,我们可以执行以下命令进行简单的加法计算:
$ bc
3 + 5
执行以上命令后,bc会输出计算结果:
8
浮点数计算
bc命令默认情况下是整数计算,如果要进行浮点数计算,需要使用"scale"变量设置小数点后的位数。例如,我们可以执行以下命令进行浮点数除法计算:
$ bc
scale=2
7 / 3
输出结果为:
2.33
bc命令在bash脚本中的应用
bc命令在bash脚本中非常实用,特别适合处理需要精确计算的数学运算。由于bash本身只支持整数运算,所以当我们需要进行浮点数计算时,就可以使用bc命令来解决这个问题。下面是一个简单的例子,演示了bc命令在bash脚本中的应用:
#!/bin/bash
# 定义变量
a=5
b=3
# 使用bc命令进行浮点数计算
result=$(echo "scale=2; $a / $b" | bc)
# 输出结果
echo "结果为:$result"
执行以上脚本,将输出结果:
结果为:1.66