1 简介
- SHELL是UNIX系统的用户与操作系统之间的一种接口。它既是UNIX系统的命令解释程序,又是一种高级的命令程序设计语言。
- 作为命令解释程序,SHELL接收用户输入的命令,将命令翻译成一个动作序列,然后调用系统过程执行这条命令。
- 作为命令程序设计语言,SHELL具有一般高级语言的许多特征,如变量定义、赋值、条件和循环语句等。用户可以利用SHELL的这些功能将多条命令组织成一个命令程序,以完成某种特定的任务。这个命令程序称为SHELL程序或SHELL过程。
- 是一门解释型语言,无需编译,直接在操作系统上运行,无需内存。
2 特点
2.1 优势
- SHELL语言非常适于编写小的CGI应用程序。UNIX系统中的SHELL语言是功能非常强大的编程工具。
- Windows NT支持POSIX标准,这意味着大多数常用的UNIX工具(例如sh)都可以在NT中运行。
- 使用SHELL语言编写的应用程序短小精干,运行时不会产生类似Perl语言解释器之类的开销,并且易于实现在不同系统之间的移植。
2.2 缺点
- SHELL语言没有象“真正”的编程语言那样,提供灵活且功能强大的控制结构。
- 在SHELL程序中常常需要不断地调用其它的工具(例如,grep、sed,甚至还有Perl)。
3 基本语法
- shell语言下的所有键值对应满足
key=value
。 - 输出变量的值
echo $变量名
。 - 输出字符串
echo "字符串"
。 - 读取输入的值存储在变量中
read 变量名
。 - 先打印要输出的字符串,再接受键盘输入的值
read -p "字符串" 变量名
。
read -p "请输入一个数字:" n
echo $n
4 shell脚本文件
4.1 基本介绍
- shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的。
- shell script就像早期dos年代的.bat,最简单的功能就是将许多指令汇整写一起,让使用者很容易地就能够一个操作执行多个命令,而shell script更是提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。
4.2 编写脚本文件
- 一般用vi命令编写脚本文件,新建一个.sh文件在其中编写代码后,给文件赋予权限并通过命令执行文件。
编写文件:
vi 文件名
赋予权限:
chmod 777 文件名
执行文件:
./文件名
- shell脚本文件的第一行一定要输入
#!/bin/bash
,"#!" 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。 - 一个shell脚本文件一般的样子:
4.3 算术运算
- 输入两个数,分别打印和、差、积、商、余数
4.4 逻辑运算
-eq
判断是否相等-ne
判断是否不相等-gt
判断是否大于greater than-ge
判断是否大于等于-lt
判断是否小于less than-le
判断是否小于等于
4.5 判断字符串
"字符串1"=="字符串2"
判断字符串是否完全相等。
4.6 分支语句:if语句
- 注意:
- if语句要以fi结尾
- 条件判断语句应该被中括号包裹:
[条件判断语句]
if [条件判断语句1]
then 执行语句1
elif [条件判断语句2]
then 执行语句2
else 执行语句3
fi
- 在shell的if语句中,我们可以使用双括号((条件语句))里面编写C语言语法的语句
((条件判断语句))
4.7 循环语句:while循环和for循环、break语句
- 循环四要素:
- ①初始化表达式,只执行一遍
- ②布尔值测试表达式,判断是否满足,直到不满足循环条件结束
- ③循环体,满足的情况下执行一遍,随后立马执行更改表达式
- ④更改表达式,一直在更改
- while循环格式对应循环四要素:
- 用while语句编写1-100累加求和代码:
#!/bin/bash
i=1
sum=0
while((i<=100))
do ((sum+=i))
((i++))
done
echo $sum
- for循环语句语法:
- 用for循环语句打印1-100代码:
#!/bin/bash
for((i=1;i<=100;i++))
do echo $i
done
- break语句:用于终止循环
- 练习:找出100-999之间的水仙花数,水仙花数:a3+b3+c^3=abc
4.8 循环的嵌套
- 定义:一个循环的循环体是另外一个循环
- 内层循环全部走完,外层循环只走了一次;外层循环全部走完,内层循环走了(外*内)次
- 内循环100次,外循环100次,总共循环了10000次:
5 特殊字符
- 以星号“*”为例,在shell语言中,特殊字符的打印往往对应着特殊编码。
echo -e "\x2a"
打印出星号,其中\x2a是“*”的unicode编码。- 打印正方形星号“*”阵列: