1.编程语言分类
在学习shell脚本前,可以先对编程语言进行一个了解。比如什么是编译型语言?什么是解释型语言?
简单来说,编译型语言是将源代码一次性转换成机器码,然后执行;而解释型语言是对源代码逐行解释并立即执行。具体如下:
- 编译型语言:
优点:由于编译型语言在程序运行前就已经完成编译,因此它们的执行效率通常较高。一旦源代码被编译成机器码,就可以多次执行而无需重新编译,这在性能上是一个重要优势。例如,C和C++就是典型的编译型语言,它们广泛用于需要高性能运算的场合,如游戏开发、系统软件开发等。
缺点:编译型语言的一个主要缺点是它们通常与特定的操作系统或硬件架构紧密耦合,这意味着为一个平台编译的程序可能无法在另一个平台上运行,除非为那个平台重新编译。这就导致了跨平台性较差的问题。
解释型语言:
优点:解释型语言的主要优点是它们能够快速启动和良好的跨平台性。由于解释型语言不需要编译过程,它们可以在任何支持解释器的环境中运行,这使得它们非常适合快速开发和跨平台应用。JavaScript和Python是两个广泛使用的解释型语言,它们经常用于Web开发和脚本编写。
缺点:解释型语言在运行时需要解释器对每一行代码进行解释,这通常会导致执行速度慢于编译型语言。每次运行程序时,都必须经过解释过程,这可能会影响程序的响应时间和整体性能。
总结:
编译型语言比解释型语言速度快,但是不如解释型语言跨平台性好。如果底层开发或者大型应用程序或者操作系开发一般都用编译型语言;如果是一些服务器脚本及一些辅助的接口,对速度要求不高、对各平台的兼容性有要求的话则一般都用解释型语言。
2.shell介绍
shell是Linux系统中的一个重要组成部分,它不仅是一个命令解释器,还是用户与操作系统内核交互的接口。
首先,作为命令解释器,Shell负责接收用户输入的命令,并将这些命令翻译成计算机能够理解的语言,以便内核执行。这个过程中,Shell会处理各种命令行选项、参数和重定向等操作。
其次,Shell还具有程序设计语言的特性,允许用户编写脚本来自动化复杂的或重复的任务。这种脚本通常被称为Shell脚本,它们可以包含一系列的命令和流程控制语句,如循环和条件判断。
最后,在类UNIX系统中,Bash Shell是最常用的Shell之一,它提供了许多高级功能,如作业控制(可以暂停、后台运行和恢复进程)、命令行自动补全、命令历史记录等。这些功能极大地提高了用户操作的效率和便利性。
- 总结
shell是连接用户与操作系统内核的桥梁,它不仅解释执行命令,还提供了编程能力,使得系统管理更加灵活和强大。
[root@localhost tmp]# cat /etc/shells
/bin/sh # 是bash的一个快捷方式
/bin/bash # bash是大多数Linux默认的shell,包含的功能几乎可以涵盖shell所有功能
/sbin/nologin # 表示非交互,不能登录操作系统
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh # 是csh的增强版,完全兼容csh
/bin/csh # 具有c语言风格的一种shell,具有许多特性,但也有一些缺陷
终端和shell有什么关系?
-
终端(Terminal):是一个输入/输出设备,它允许用户与计算机系统进行交互。终端可以是物理设备,如传统的硬件终端,也可以是虚拟的软件终端,即在图形用户界面中模拟的终端窗口。终端的主要功能是显示文本信息和接收用户输入的命令。
-
Shell:是一个命令行解释器,它提供了用户与操作系统内核交互的界面。Shell会接收用户通过终端输入的命令,将这些命令翻译成操作系统可以理解的语言,然后调用相应的程序执行这些命令,并将结果输出到终端上供用户查看。
总的来说,当用户在终端中键入命令时,实际上是在与shell进行交互。shell根据用户的输入执行相应的操作,并通过终端将结果反馈给用户。
3.shell脚本
(一)什么是shell脚本?
-
一句话概括
简单来说就是将需要执行的命令保存到文本中,按照顺序执行。它是解释型的,意味着不需要翻译。 -
准确叙述
若干命令+脚本基本格式+脚本特定语法+思想=shell脚本
(二)什么时候用到脚本?
重复化、复杂化的工作,通过把工作的命令写成脚本,以后仅仅需要执行脚本就能完成这些工作。
(三)shell脚本能干什么?
- 自动化软件部署 (LAMP/LNMP/Tomcat…)
- 自动化管理 (系统初始化脚本、批量更改主机密码、推送公钥…)
- 自动化分析处理 (统计网站访问量)
- 自动化备份 (数据库备份、日志转储…)
- 自动化监控脚本
(四)如何学习shell脚本?
- 尽可能记忆更多的命令(记忆命令使用的功能和场景)
- 掌握脚本的标准的格式(指定的字符、使用标准的执行方式运行脚本)
- 必须熟练掌握脚本的基本语法(重点)
(五)shell脚本的基本写法
1)脚本第一行
#!指定解释器【必写!!!】
#!/bin/bash 表示以下内容使用bash解释器解析
2)脚本第二部分,注释(#号)说明,对脚本的基本信息描述【可选】
3)脚本第三部分,脚本要实现的具体代码内容
4.shell脚本的执行方法
(1)标准执行方式
使用 ./ 的方式,再加上文件路径,可执行shell脚本,我使用最多的就是这个方法,感觉挺方便的。
示例:
[root@localhost tmp]# mkdir shello1
[root@localhost tmp]# cd shello1/
[root@localhost shello1]# vim first_shell.sh
[root@localhost shello1]# chmod +x first_shell.sh
[root@localhost shello1]# ll
总用量 4
-rwxr-xr-x. 1 root root 70 4月 17 14:41 first_shell.sh
[root@localhost shello1]# pwd
/root/tmp/shello1
[root@localhost shello1]# ./first_shell.sh
hello world
hello world
hello world
[root@localhost shello1]# cat first_shell.sh
#!/bin/bash
echo "hello world"
echo "hello world"
echo "hello world"
# 注意:脚本必须要有可执行权限
(2)非标准执行方式
直接在命令行指定解释器执行
[root@localhost shello1]# bash first_shell.sh
hello world
hello world
hello world
[root@localhost shello1]# sh first_shell.sh
hello world
hello world
hello world
使用source命令读取脚本文件,执行文件里的代码
[root@localhost shello1]# source first_shell.sh
hello world
hello world
hello world
脚本练习
[root@localhost shell01]# vim 1.sh
[root@localhost shell01]# ls
1.sh
[root@localhost shell01]# ./1.sh
-bash: ./1.sh: 权限不够
[root@localhost shell01]# chmod +x 1.sh
[root@localhost shell01]# ./1.sh
任务已于2024-04-17 15:09:54完成
[root@localhost shell01]# cat 1.sh
#!/bin/bash
rm -rf /tmp/*
mkdir /tmp/dir{1..3}
cp /etc/hosts /tmp/dir1
echo "任务已于$(date +'%F %T')完成"
到此,第一次学习就总结完成啦,以后会持续更新…