目录:
- shell介绍
- shell基本语法
- 第一个shell脚本
- 运行 Shell 脚本有两种方法
一、shell介绍
简介:
- Shell这单词的原意是"外壳",跟kernel(内核)相对应,比喻内核外面的一层,即用户跟内核交互的对话界面。
- Shell 是一个用 C 语言编写的程序,提供一个与用户对话的环境,它是用户使用 Linux 的桥梁。这个环境只有一个命令提示符
让用户通过键盘输入命令,所以又称为命令行环境(command line interface,简写为CLI)。
Shell接受用户输入的命令,讲命令送入操作系统执行,并将结果返回给用户- Shell程序又是一个命令解释器,解释用户输入的命令。它支持变量,条件判断,循环操作等语法,
所以用户可以用shell命令编写各种小程序,称为脚本(script)。所以shell也是一种解释型程序设计语言
shell 脚本:
- Shell 脚本(shell script),是一种为 shell 编写的脚本程序
- shell 和 shell script 是两个不同的概念,通常说的 shell 都是指 shell 脚本
Shell 环境:
- 1.Shell 编程跟 python 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了
- Linux 的 Shell 种类众多,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)- 主流的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell
- 在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash
- #! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序
例如:
#!/bin/sh:Bourne Shell
#!/bin/bash:Bourne Again Shell
查看shell环境类的命令:
1.查看当前设备的默认shell的命令: echo $SHELL
root@henry0902host:~# echo $SHELL
/bin/bash
2.查看当前的 Linux 系统安装的所有 Shell: cat /etc/shells
root@henry0902host:~# cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
3.一般来说,ps命令结果的倒数第二行是当前Shell
root@henry0902host:~# ps
PID TTY TIME CMD
170762 pts/2 00:00:00 bash
194031 pts/2 00:00:00 ps
二、shell基本语法
1、echo命令:作用是在屏幕输出一行文本
例如:
1.输出一行文本
$ echo hello world
hello world
2.要输出的是多行文本,即包括换行符。这时就需要把多行文本放在引号里面
$ echo 'hello world'
hello
world
-e参数:
1.输出一行文本(换行符输出)
$ echo "Hello\nWorld"
hello\world
2.双引号/单引号的情况
$ echo -e "Hello\nWorld"
hello\world
2、命令格式:
- 命令行环境中,主要通过使用 Shell 命令,进行各种操作。Shell 命令基本都是下面的格式
- 格式:command [ arg1 … [ argN ]]
参数1:command是具体的命令或者一个可执行文件,
参数2:arg1 …
参数3:argN是传递给命令的参数,它们是可选的
例如:ls-l
这个命令中,ls是命令,-l是参数。
例如:Bash 命令换行
3、空格:
- Bash 使用空格(或 Tab 键)区分不同的参数
- 如果参数有多个空格,Bash 会自动忽略多余的空格
例如
4、分号:
- 分号(;)是命令的结束符,使得一行可以放置多个命令,上一个命令执行结束后,再执行第二个命令
- 注意:使用分号时,第二个命令总是接着第一个命令执行,不管第一个命令执行成功或失败
$ clear; ls # <== Bash 先执行clear命令,执行完成后,再执行ls命令。
5、命令组合符&&和||(与和或):
- 定义
Bash 还提供两个命令组合符&&和||,允许更好地控制多个命令之间的继发关系
1. 命令组合符&&的使用
例如:Command1 && Command2
含义:
1.如果Command1命令运行成功,则继续运行Command2命令
例如:
root@henry0902host:~# cat py.txt && cat test.txt
解析:两个命令都运行成功
2.如果Command1命令运行失败,则不会在继续运行Command2命令
例如:
root@henry0902host:~# cat psy.txt && cat test.txt
解析:第一个命令运行失败,不会在执行第二个
2. 命令组合符||的使用
例如:Command1 || Command2
含义:
1.如果Command1命令运行失败,则继续运行Command2命令
例如:
root@henry0902host:~# cat psy.txt || cat test.txt
解析:第一个个命令失败,会继续执行第二个
6、type命令:
- 定义
Bash 本身内置了很多命令,同时也可以执行外部程序。通过type命令可以知道一个命令是内置命令,还是外部程序
1. type命令用来判断命令的来源
1.查看echo命令的来源
例如:
root@henry0902host:~# type echo <== echo是shell 内置的builtin库的命令
2.查看ls命令的来源
例如:
root@henry0902host:~# type ls <== ls 是外部程序的命令
2. type 命令本身也是一个内置命令
root@henry0902host:~# type type
3.type命令的参数
1.type命令的-a参数: 查看一个命令的所有定义
root@henry0902host:~# type -a echo
2.type命令的-t参数: 查看一个命令的所有定义
root@henry0902host:~# type -t if <== if 是一个关键字
三、什么是shell脚本
1.定义:
- 新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好
2.脚本执行定义:
- 第一行一般代表当前脚本需要系统用什么解释器来执行
#! 是一个约定的标记
例如:
- #!/bin/bash
echo “Hello World !”
表示:shell去执行- #!/bin/python
print(“Hello World !”)
表示:python解释器执行
3.shell 注释:
- 以 # 开头的行就是注释,会被解释器忽略
1.单行注释: 通过每一行加一个 # 号设置单行注释
2.多行注释: 通过:<<! 注释内容 ! 设置多行注释
四、运行 Shell 脚本有两种方法
- 作为可执行程序
1. 查看当前脚本有没有执行权限,没有需要加上执行权限,再去执行
注意事项:
1. 一定要写成 ./run.sh:告诉系统说,就在当前目录找
2. 而不是 run.sh:linux 系统会去 PATH 里寻找有没有叫 run.sh 的,是会找不到命令的
- 作为解释器参数
1. 这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名