1.9 Shell命令提示符
-
启动 Linux 桌面环境自带的终端模拟包,或者从 Linux 控制台登录后,便可以看到 Shell 命令提示符。看见命令提示符就意味着可以输入命令了。命令提示符不是命令的一部分,它只是起到一个提示作用。
-
不同的 Linux 发行版使用的提示符格式大同小异,例如在 CentOS 中,默认的提示符类似下面这样:
[root@CncLuczk ~]#
-
各个部分的含义如下:
[]
是提示符的分隔符号,没有特殊含义。root
表示当前登录的用户,我现在使用的是 root用户登录。@
是分隔符号,没有特殊含义。CncLuczk
表示当前系统的简写主机名(完整主机名是 CncLuczk.localdomain)。~
代表用户当前所在的目录为主目录(root)。如果用户当前位于主目录下的 根目录中,那么这里显示的就是 /。$
是命令提示符。Linux 用这个符号标识登录的用户权限等级:如果是超级用户(root 用户),提示符就是#
;如果是普通用户,提示符就是$
。
-
总结起来,Linux Shell 默认的命令提示符的格式为:
[username@host directory]$
或者
[username@host directory]#
- 主目录:Linux 系统是纯字符界面,用户登录后,要有一个初始登录的位置,这个初始登录位置就称为用户的主目录(home 目录)。超级用户的主目录为
/root/
,普通用户的主目录为/home/用户名/
。 - 用户在自己的主目录中拥有完整权限,所以我们也建议操作实验可以放在主目录中进行。
- 我们使用 cd 命令切换一下用户所在目录,看看有什么效果。
[root@CncLuczk ~]# cd demo
[root@CncLuczk demo]# cd /usr/local
[root@CncLuczk local]#
-
仔细看,如果切换用户所在目录,那么命令提示符中会变成用户当前所在目录的最后一个目录(不显示完整的所在目录 /usr/ local/,只显示最后一个目录 local)。
-
第二层命令提示符:有些命令不能在一行内输入完成,需要换行,这个时候就会看到第二层命令提示符。第二层命令提示符默认为
>
,请看下面的例子:
[root@CncLuczk ~]# echo "hello shell"
hello shell
[root@CncLuczk ~]# echo "
> http://
> www.baidu.com
> "
http://
www.baidu.com
-
第一个 echo 命令在一行内输入完成,不会出现第二层提示符。第二个 echo 命令需要多行才能输入完成,提示符
>
用来告诉用户命令还没输入完成,请继续输入。 -
echo 命令用来输出一个字符串。字符串是一组由
" "
包围起来的字符序列,echo 将第一个"
作为字符串的开端,将第二个"
作为字符串的结尾。对于第二个 echo 命令,我们将字符串分成多行,echo 遇到第一个"
认为是不完整的字符串,所以会继续等待用户输入,直到遇见第二个"
.这样保留的输入文本的格式。 -
命令提示符的格式不是固定的,用户可以自定义修改
1.10 第一个Shell脚本
- 打开文本编辑器,新建一个文本文件,并命名为 test.sh。
扩展名
sh
代表 shell,扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用php
好了。
- 在 test.sh 中输入代码:
#!/bin/bash
echo "Hello World !" #这是一条语句
-
第 1 行的
#!
是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell;后面的/bin/bash
就是指明了解释器的具体位置。 -
第 2 行的 echo 命令用于向标准输出文件(Standard Output,stdout,一般就是指显示器)输出文本。在
.sh
文件中使用命令与在终端直接输入命令的效果是一样的。 -
第 2 行的
#
及其后面的内容是注释。Shell 脚本中所有以#
开头的都是注释(当然以#!
开头的除外)。写脚本的时候,多写注释是非常有必要的,以方便其他人能看懂你的脚本,也方便后期自己维护时看懂自己的脚本——实际上,即便是自己写的脚本,在经过一段时间后也很容易忘记。 -
下面给出了一段稍微复杂的 Shell 脚本:
#!/bin/bash
echo "What is your name?"
read name
echo "Hello, $name"
-
第 4 行中表示从终端读取用户输入的数据,并赋值给 PERSON 变量。read 命令用来从标准输入文件(Standard Input,stdin,一般就是指键盘)读取用户输入的数据。
-
第 6 行表示输出变量 name的内容。注意在变量名前边要加上
$
,否则变量名会作为字符串的一部分处理。
1.11 执行Shell脚本
- 运行 Shell 脚本有两种方法,一种在新进程中运行,一种是在当前 Shell 进程中运行
1.11.1 在新进程中运行 Shell 脚本
- 在新进程中运行 Shell 脚本有多种方法。
1.11.1.1 将 Shell 脚本作为程序运行
- Shell 脚本也是一种解释执行的程序,可以在终端直接调用(需要使用 chmod 命令给 Shell 脚本加上执行权限),如下所示:
[root@CncLuczk ~]# cd demo #切换到 test.sh 所在的目录
[root@CncLuczk test]# chmod +x ./test.sh #给脚本添加执行权限
[root@CncLuczk test]# ./test.sh #执行脚本文件
Hello World ! #运行结果
-
第 2 行中,
chmod +x
表示给 test.sh 增加执行权限。 -
第 3 行中,
./
表示当前目录,整条命令的意思是执行当前目录下的 test.sh 脚本。如果不写./
,Linux 会到系统路径(由 PATH 环境变量指定)下查找 test.sh,而系统路径下显然不存在这个脚本,所以会执行失败。 -
通过这种方式运行脚本,脚本文件第一行的
#!/bin/bash
一定要写对,好让系统查找到正确的解释器。
1.11.1.2 将 Shell 脚本作为参数传递给 Bash 解释器
- 也可以直接运行 Bash 解释器,将脚本文件的名字作为参数传递给 Bash,如下所示:
[root@CncLuczk test]# cd demo #切换到 test.sh 所在的目录
[root@CncLuczk test]# /bin/bash test.sh #使用Bash的绝对路径
Hello World ! #运行结果
-
通过这种方式运行脚本,不需要在脚本文件的第一行指定解释器信息,写了也没用。
-
更加简洁的写法是运行 bash 命令。bash 是一个外部命令,Shell 会在 /bin 目录中找到对应的应用程序,也即 /bin/bash
[root@CncLuczk test]# bash test.sh
Hello World !
- 这两种写法在本质上是一样的:第一种写法给出了绝对路径,会直接运行 Bash 解释器;第二种写法通过 bash 命令找到 Bash 解释器所在的目录,然后再运行,只不过多了一个查找的过程而已。
1.11.1.3 检测是否开启了新进程
-
Linux 中的每一个进程都有一个唯一的 ID,称为 PID,使用
$$
变量就可以获取当前进程的 PID。$$
是 Shell 中的特殊变量,
-
由此可知:每次执行shell脚本,进程的 PID 都不一样。
1.11.2 在当前进程中运行 Shell 脚本
-
这里需要引入一个新的命令——source 命令。source 是 Shell 内置命令的一种,它会读取脚本文件中的代码,并依次执行所有语句。可以理解为,source 命令会强制执行脚本文件中的全部命令,而忽略脚本文件的权限。
-
source 命令的用法为:source filename
-
也可以简写为:
. filename
-
两种写法的效果相同。对于第二种写法,注意点号
.
和文件名中间有一个空格。 -
使用 source 运行上节的 test.sh, source 命令不用给脚本增加执行权限,并且写不写
./
都行 -
如果在新进程中运行 Shell 脚本,一般使用
bash test.sh
这种写法;如果在当前进程中运行 Shell 脚本,一般使用. test.sh
这种写法。
1.12 利用shell在Linux平台运维
-
Linux 运维人员就是负责 Linux 服务器的运行和维护。Linux 在服务器上的应用非常广泛,可以用来搭建 Web 服务器、数据库服务器、负载均衡服务器(CDN)、邮件服务器、DNS 服务器、反向代理服务器、VPN 服务器、路由器等。用 Linux 作为服务器系统不但非常高效和稳定,还不用担心版权问题,不用付费。
-
由于 Linux 服务器的大规模应用,才需要一批专业的人才去管理,这群人就是 Linux 运维工程师(OPS)。OPS 的主要工作就是搭建起运行环境,让程序员写的代码能够高效、稳定、安全地在服务器上运行,拥有架设服务器集群的能力,还会编程开发常用的工具
-
OPS 工作的内容:
- 安装操作系统,例如 CentOS、Ubuntu 等。
- 部署代码运行环境,例如网站后台语言采用 PHP,就需要安装 Nginx、Apache、MySQL、PHP 运行时等。
- 及时修复漏洞,防止服务器被攻击,这包括 Linux 本身漏洞以及各个软件的漏洞。
- 根据项目需求升级软件,如果现在服务器压力比较大,就可以考虑将旧版的 PHP 5.x 升级到 PHP 7.0。
- 监控服务器压力,别让服务器宕机。例如淘宝双十一的时候就会瞬间涌入大量用户,导致部分服务器宕机,网页没法访问,甚至连支付宝都不能使用。
- 分析日志,及时发现代码或者环境的问题,通知相关人员修复。
-
OPS 面对的是成千上万台的服务器,一些人力工作都需要自动化起来,跑一段代码就能在成千上万台服务器上完成相同的工作,例如服务的监控、代码快速部署、服务启动停止、数据备份、日志分析等
-
Shell 脚本很适合处理纯文本类型的数据,而 Linux 中几乎所有的配置文件、日志文件(如 NFS、Rsync、Httpd、Nginx、MySQL 等),以及绝大多数的启动文件都是纯文本类型的文件。Shell 脚本是实现 Linux 系统自动管理以及自动化运维所必备的工具,Linux 的底层以及基础应用软件的核心大都涉及 Shell 脚本的内容。如:定时任务、SSH服务、NFS存储、Zabbix监控、KVM虚拟化、OpenStack/Docker、lptables防火墙、LVS集群、PHP运行环境、tomcat
参考文献:
执行Shell脚本(多种方法)
下一篇:Shell学习-03-变量操作
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123691.html