前言:
1 |
计算机只能认识(识别)机器语言(0和1),如(11000000 这种)。但是,我们的程序猿们不能直接去写01这样的代码,所以,要想将程序猿所开发的代码在计算机上运行,就必须找"人"(工具)来翻译成机器语言,这个"人"(工具)就是我们常常所说的**编译器或者解释器**。 |
编程语言分类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
机器语言:用二进制指令去编程程序,直接控制计算机硬件 优点:执行效率最高 缺点:难以记忆,极容易出错 汇编语言:用英文标签取代二进制指令去编写程序,直接控制计算机硬件 优点:执行效率也很高,解决机器语言男记的问题 缺点:编程的的复杂依然很高,开发效率很低 高级语言:用人类能理解的表达方式去编写程序,计算机无法理解,需要经过翻译计算机才能理解 编译型(c、go) 解释型(shell、python) 执行效率:机器语言》汇编语言》高级语言(编译型》解释型) 开发效率:机器语言《汇编语言《高级语言 |
编译型语言:
1 |
程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++ |
解释型语言:
1 |
程序不需要编译,程序在运行时由**解释器**翻译成机器语言,每执行一次都要翻译一次。因此效率比较低。比如Python/JavaScript/ Perl /ruby/Shell等都是解释型语言。 |
总结
1 |
编译型语言比解释型语言速度较快,但是不如解释型语言跨平台性好。如果做底层开发或者大型应用程序或者操作系开发一般都用编译型语言;如果是一些服务器脚本及一些辅助的接口,对速度要求不高、对各个平台的兼容性有要求的话则一般都用解释型语言。 |
shell的种类
1 2 3 4 5 6 7 8 |
[root@lb01 ~]# cat /etc/shells /bin/sh #是bash的一个快捷方式 /bin/bash #bash是大多数Linux默认的shell,包含的功能几乎可以涵盖shell所有的功能 /sbin/nologin #表示非交互,不能登录操作系统 /bin/dash #小巧,高效,功能相比少一些 /bin/csh #具有C语言风格的一种shell,具有许多特性,但也有一些缺陷 /bin/tcsh #是csh的增强版,完全兼容csh |
shell脚本的基本写法
1)脚本第一行,魔法字符==#!==指定解释器【必写】
注意: 如果直接将解释器路径写死在脚本里,可能在某些系统就会存在找不到解释器的兼容性问题,所以可以使用: #!/bin/env 解释器 #!/bin/env bash
2)脚本第二部分,注释(#号)说明,对脚本的基本信息进行描述【可选】
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/env bash # 以下内容是对脚本的基本信息的描述 # Name: 名字 # Desc:描述describe # Path:存放路径 # Usage:用法 # Update:更新时间 #下面就是脚本的具体内容 commands ... |
3)脚本第三部分,脚本要实现的具体代码内容
shell脚本的执行方法
1) 绝对路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[root@lb01 ~]# mkdir /scripts #编写人生中的第一个脚本 [root@lb01 ~]# vim /scripts/1.sh #!/bin/env bash # 以下内容是对脚本的基本信息的描述 # Name: first_shell.sh # Desc: hello world # Path: /scripts/1.sh # Usage:/scripts/1.sh # Update:2020-11-16 echo "hello world" #给脚本增加可执行权限 [root@lb01 ~]# chmod +x /scripts/1.sh #执行脚本 [root@lb01 ~]# /scripts/1.sh hello world 注意: 1.当前用户对沿途的文件夹都有x权限 2.当前用户对目标文件应该有rx权限 |
2)相对路径
1 2 3 4 5 6 |
[root@lb01 /scripts]# ./1.sh hello world 注意: 1.当前用户对沿途的文件夹都有x权限 2.当前用户对目标文件应该有rx权限 |
3)加上解释器作为前缀:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@lb01 ~]# bash /scripts/1.sh hello world #或者 [root@lb01 /scripts]# bash ./1.sh hello world #或者 [root@lb01 /scripts]# sh ./1.sh hello world #或者 [root@lb01 ~]# sh /scripts/1.sh hello world 注意: 1.当前用户对沿途的文件夹都有x权限 2.当前用户对目标文件应该有r权限 |
4) 用source命令执行或者在路径前加.空格作为前缀
1 2 3 4 5 6 7 8 9 10 11 |
[root@lb01 ~]# source /scripts/1.sh hello world #或者 [root@lb01 /scripts]# source ./1.sh hello world #或者 [root@lb01 /scripts]# . ./1.sh hello world #或者 [root@lb01 ~]# . /scripts/1.sh hello world |
总结:
方式1、2、3都是开启一个子bash进程,然后在子进程里运行的shell程序
方式4是直接在当前bash进程里运行的shell程序
调试shell程序
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@lb01 /scripts/day01]# cat 2.sh #!/usr/bin/env bash #Author:Mr.Chen #Blog: #Time:2020-11-17 14:51:47 #Name:2.sh #Mailbox:1569475484@qq.com #Discription:To echo '11111' echo '22222' echo '33333' echo '44444' |
方式1
1 2 3 4 5 6 7 8 9 |
[root@lb01 /scripts/day01]# sh -x 2.sh + echo 11111 11111 + echo 22222 22222 + echo 33333 33333 + echo 44444 44444 |
方式2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[root@lb01 /scripts/day01]# cat 2.sh echo '11111' echo '22222' echo '33333' echo '44444' [root@lb01 /scripts/day01]# bash -x 2.sh + set -x + echo 11111 11111 + set +x 22222 33333 44444 |
方式3:调试语法是否有问题
1 |
[root@lb01 /scripts/day01]# bash -n 2.sh |