持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
Shell脚本编程基础
作为一个初级开发,我一直没怎么了解过Linux相关的东西,仅仅只是会一些基本的命令,太失败了,所以最近准备学习Linux的Shell脚本编程基础,这是我在b站跟着学的视频,主要是作为我的笔记
无论什么语言还是脚本,都需要一个编程器--称呼为编程器好像也不太对,反正是需要一个编程的地方,经典的Java可以用eclipse或者idea,当然了,也有直接用记事本的大佬,这我们就不谈了
Shell脚本并不用什么复杂的环境,一般的linux系统都有
当然了,不想弄linux的也可以直接找在线编程的,网上一抓一大把,我是在自己搞的虚拟机上操作
一、helloWorld
创建shell-example文件夹,之后关羽shell脚本我都会在里面写
直接创建一个.sh结尾的文件,在里面编写脚本,使用 vim 命令也可以直接创建并进入编写的文件
编写文件(语法接下来会讲),一个简单的文件就这样
使用 bash 命令就可以运行.sh文件了,可以看到上面 echo 命令后面的内容被输出
chmod +X 加了一个可执行权限,可以看到 2-3.sh文件变色了(文件是我随意命名的,只是以.sh结尾),而且权限位多了一个x
加了这个权限有什么用?直接可以运行 (跟 bash 2-3.sh 命令作用一样),有什么用途?直接运行避免一些开发|测试人员不懂 bash 命令,不要怀疑有这种人,在学习这个之前的我就是
接下来开始详解
- 注释符号#,在bash文件中只有这一种注释符号
- 文件起始处的 #! 声明自己是一个脚本文件
"#!/bin/sh"是对shell的声明,说明你所用的是哪种类型的shell及其路径所在。(#!/bin/sh 是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面跟的是解释此脚本的shell的路径)如果没有声明,则脚本将在默认的shell中执行,默认shell是由用户所在的系统定义为执行shell脚本的shell.如果脚本被编写为在Kornshell ksh中运行,而默认运行shell脚本的为C shell csh,则脚本在执行过程中很可能失败。所以建议大家就把"#!/bin/sh"当成C 语言的main函数一样,写shell必须有,以使shell程序更严密。
简洁描述:为什么使用#!/usr/bin/env bash当我们通过./xxx.sh执行脚本时:避免目标系统上的解释器路径和预期不一致,例如同时存在多个版本的Bash,通过环境变量设置的优先解释器路径不同于期望的/bin/ bash
- 当前shell脚本默认使用的解释器
而我这为什么是 #!/usr/bin/env bash ?
首先是因为我linux系统的bash在/usr/bin
而后面的env是因为脚本解释器在linux中可能被安装于不同的目录,如果直接将解释器路径写在脚本里,这样可能会造成找不到解释器的问题 ,env可以在系统的PATH目录中查找解释器。
在这里如果直接用#!/usr/bin bash做文件头,然后执行脚本,就会报错(直接用bash 2-3.sh是指定了解释器,所以不会报错)
- 查看当前正在使用shell解释器
ps | grep $$
- 查看当前shell解释器对应的文件绝对路径。
type bash
- 查看当前bash的版本号
bash --version
因为是利用上班的碎片时间写的,所以写得不够多,也不够详细,主要是作为自己学习的笔记,好记性不如烂笔头嘛