什么是shell?shell在Linux内怎么编写脚本?
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
一、概念
什么是shell?
shell是一个作为用户与Linux系统间接口的程序它允许用户向操作系统输入需要执行的命令。
下图显示了shell实际上是两种shellbash、csh和其他程序环绕在Linux内核的四周。
在大多数Linux发行版中默认的shell程序/bin/sh实际上是对程序/bin/bash的一个连接。可以使用如下命令来查看bash的版本号
$ /bin/bash --version
如果想要切换到另一个shell例如bash不是你的系统中默认的shell )你只需直接执行需要的shell程序(例如/bin/bash)就可以运行新的shell并且改变命令提示符了。
二、简单创建脚本
1.创建脚本的后缀名为.sh
2.执行"./my.sh"系统发现是脚本文件后会帮助我们启动bash达到和"bash my.sh"一样的结果
3.书写shell的规则与含义
如下是一个简单的shell编程第一行是执行绝对路径下的bash如果没有写系统会认为是默认的系统解释器第3行是输出“hello shell”的内容第5行exit命令的作用是保证脚本程序能够返回一个有意义的退出码。
- 程序中的注释是以#符号开始一直持续到该行的结束。但是第一行#!是特殊形式的注释是告诉系统同一行上紧跟在他后面的那个参数是用来执行文本文件的程序。
下例是键盘输入并输出值显示。第3行是提示符输入第4行是从键盘读取数据给line第6行是printf输出line值。$的含义在下面第三板块变量内讲解
如果想要换行的话应加入\n如下所示
三、shell语法
在本小结内包含了一下重要内容
- 变量字符串、数字、环境和参数
- 条件shell中的布尔值
- 程序控制if、elif、for、while、until、case
- 命令控制
- 函数
- shell内置命令
- 获取命令的执行结果
- here文档
1.变量
一些规则
- 并不需要事先声明变量只用在要使用是创建即可
- 默认情况下所有变量都被看作字符串并以字符串来存储例如下图中第3行的""并不一定是字符串的存储。
- “”在脚本中是弱引用。如上图第四行中"hello $a"输出是hello 100第5行的s="hello 100"
- 单引号‘’是原样输出例如‘hello $a’输出就是hello $a
- 大小写仍是被区分的
- 要访问变量的内容需要在前面加$符号例如$a,就是取a的值
- 变量赋值是对空间的指向。例如a=100不是说在a的空间内存放100而是让a指向100所在的空间
- 如果字符串内包含空格就必须用引用把他们括起来。
- 等号两边不能有空格如有有空格就代表判等的含义了
2.环境变量
当一个shell脚本程序开始执行时一些变量会根据环境设置中的值来进行初始化。这些变量通常用大写字母做名字以便把他们和用户脚本程序里定义的变量区分开来后者按惯例都用小写字母做名字。
下图是系统使用手册中列举的环境变量。
下图举例输出参数变量hello 123其中命令$1 ->第一个变量$2 ->第2个变量而对于第三个变量没有所有$3输出为空。
如下示例对一级提示符修改为“^_^”
恢复输入下面命令
3.参数变量
参数变量表如下所示
除了使用echo命令来查看变量内容外还可以使用read命令来读取
4.条件
test或[命令
shell内bool布尔判断命令使用[或test。[在使用时还需要符号]结尾。
test命令可以使用条件类型归为3类字符串比较、算术比较和文件有关的条件测试如下图所示
5.控制结构
if语句
这个要结合上面条件讲的内容一起使用使用规则如下
if condition
then
statements
else
statements
fi
elif语句
和else if相同用法但是在shell内与if遵守相同规则
下面是一些具体的示例
判断文件的类型
此处也体现了脚本文件的好处如果用C语言去写势必更加复杂化。
对成绩进行判断等级示例
echo "input"
read grade
if [ "$grade" -gt 100 || "$grade" -lt 0]
then
echo "error!\n"
if [ "$grade" -ge 80]
then
echo "A"
elif [ "$grade" -ge 70]
then
echo "B"
elif[ "$grade" -ge 60]
then
echo "C"
else
echo "D"
fi
for语句
我们可以使用for结构来循环处理一组值这组值可以是任意的字符串集合。下面是它的语法
for variable in values
do
statements
done
示例
补充在脚本中对命令的使用例如想要通过"ls"去输出当前路径下的文件内容然后赋值给str,但是直接str=ls这样的话str的值是ls并不是ls代表路径下的一系列文件。
此时需要用“$()”或者“``”反引号去识别命令如下就能得到我们想要的结果
也可以用for语句输出
内容暂时先到这里剩下的下周补齐~