「 SHELL 」基础知识

SHELL 基础知识

2.1 shell 脚本

我们在上面简单介绍了一下什么是shell脚本,现在我们来进一步的来介绍shell脚本的要求/格式/规范等内容

2.1.1 创建脚本

脚本创建工具

创建脚本常见的编辑器是 vi/vim

脚本名称

shell 脚本的命名简单来说就是要有意义,方便我们通过脚本名,来知道这个文件是干什么用的

脚本内容

各种可以执行的命令

注释内容

单行注释:

  • 除了首行的#不是注释外,其他所有行内容,只要首个字符是#,那么就表示该行是注释
#!/bin/bash 
echo '1' 
# echo '2' # 这一行就表示注释 
echo '3'

多行注释:

  • 多行注释有两种方法::<
#!/bin/bash 
echo '1' 
:<

2.1.2 脚本执行

shell 执行的方法

Shell脚本的执行通常可以采用以下几种方式

bash /path/to/script-name 或 /bin/bash /path/to/script-name (**强烈推荐使用**)

/path/to/script-name 或 ./script-name (当前路径下执行脚本)

source script-name 或 . script-name (注意“.“点号)

执行说明:

  1. 脚本文件本身没有可执行权限或者脚本首行没有命令解释器时使用的方法,我们推荐用bash执行。

    使用频率:☆☆☆☆☆

  2. 脚本文件具有可执行权限时使用。

    使用频率:☆☆☆☆

  3. 使用source或者.点号,加载shell脚本文件内容,使shell脚本内容环境和当前用户环境一致。

    使用频率:☆☆☆ 使用场景:环境一致性

2.1.2 脚本开发规范

  1. 脚本命名要有意义,文件后缀是.sh

  2. 脚本文件首行是而且必须是脚本解释器

    #!/bin/bash

  3. 脚本文件解释器后面要有脚本的基本信息等内容

    脚本文件中尽量不用中文注释;

    尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰

    常见的注释信息:脚本名称、脚本功能描述、脚本版本、脚本作者、联系方式等

  4. 脚本文件常见执行方式:bash 脚本名

  5. 脚本内容执行:从上到下,依次执行

  6. 代码书写优秀习惯;

  • 成对内容的一次性写出来,防止遗漏。

    如:()、{}、[]、''、``、""

  • []中括号两端要有空格,书写时即可留出空格[ ],然后再退格书写内容

  • 流程控制语句一次性书写完,再添加内容

  1. 通过缩进让代码易读;(即该有空格的地方就要有空格)

2.2 变量

变量的学习我们主要从四个方面来学习:

  • 变量的定义和分类
  • 本地变量

  • 全局变量

  • shell内置变量

2.2.1 什么是变量

变量是什么?

变量包括**两部分:**

      变量名     不变的 

      变量值     变化的 

我们一般所说的变量指的是:变量名 

shell 中的变量分为三大类:

本地变量、全局变量、shell内置变量

2.2.2 本地变量

本地变量是什么?

本地变量就是:在当前系统的某个环境下才能生效的变量,作用范围小。

本地变量包含两种:普通变量和命令变量

普通变量

普通变量的定义方式有如下三种,接下来我们就分别说一下这三种方式:

方式一:变量名=变量值 

重点:变量值必须是一个整体,中间没有特殊字符 

方式二:变量名='变量值' 

重点:我看到的内容,我就输出什么内容 

方式三:变量名="变量值" 

重点:如果变量值范围内,有可以解析的变量A,那么首先解析变量A,将A的结果和其他内容组合成一个整体,重 新赋值给变量B 

习惯:

数字不加引号,其他默认加双引号 

命令变量(熟练)

命令变量有两种定义方式,接下来我们就来介绍一下这两种方式
定义方式一:

变量名=`命令`

注意:` 是反引号

定义方式二:
变量名=$(命令)

执行流程:

1、执行`或者$()范围内的命令

2、将命令执行后的结果,赋值给新的变量名A

2.2.3 全局变量

全局变量是什么

全局变量就是:在当前系统的所有环境下都能生效的变量。

查看全局变量命令

可以通过命令查看环境变量 env 只显示全局变量

定义全局变量

方法一:变量=值 export 变量

方法二:(最常用) export 变量=值

2.2.4 变量查看和取消

查看变量:

方式一:$变量名 场景:私下里,在命令行/脚本中使用 图省事

方式二:"$变量名" 场景:私下里,在命令行/脚本中使用 图省事

方式三:{变量名} f " 使用频率较高

方式四:"${变量名}" 场景:标准使用方式

取消变量

unset 变量名

2.2.5 shell内置变量

我们之前学习的本地变量,全局变量都是需要通过定义,然后才能实现相应功能的,那么有没有一些变量我们可以直 接拿过来使用实现某种具体的功能呢?有,这就是shell内置变量

和脚本文件有关

符号 意义
$0 获取当前执行的shell脚本文件名
$n 获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9就要用大 括号括起来${10}
$# 获取当前shell命令行中参数的总个数
$? 获取执行上一个指令的返回值(0为成功,非0为失败)

重点内置变量演示效果

$0 ---> 获取脚本的名称

#!/bin/bash 

# 获取脚本的名称 
echo "我脚本的名称是: file.sh" 
echo "我脚本的名称是:$0"

$# ---> 获取当前脚本传入参数的数量

$n ---> 获取当前脚本传入的第n个位置的参数

#!/bin/bash 

# 获取当前脚本传入的参数数量 
echo "当前脚本传入的参数数量是: $#" 

# 获取指定位置的参数 
echo "第一个位置的参数是: $1" 
echo "第二个位置的参数是: $2" 
echo "第三个位置的参数是: $3" 
echo "第四个位置的参数是: $4"

$? ---> 获取文件执行或者命令执行的返回状态值

# bash nihao 
bash: nihao: No such file or directory 
# echo $? 
127 
# ls 
file1.sh num.sh test.sh weizhi.sh 
# echo $? 
0

字符串精确截取

格式:${变量名:起始位置:截取长度}

示例:

${file:0:5} 从第1个字符开始,截取5个字符

${file::5} 从第1个字符开始,截取5个字符

${file:5:5} 从第6个字符开始,截取5个字符

${file:5} 从第6个字符开始,截取后面所有的字符

${file:0-5} 从倒数第5个字符开始,截取后面所有的字符

${file:0-6:3} 从倒数第6个字符开始,截取之后的3个字符
示例

#/bin/bash
# 字符串截取
a=$1
echo "${a:0:5}"
echo "${a::5}"
echo "${a:5:5}"
echo "${a:5}"
echo "${a:0-5}"
echo "${a:0-6:5}"

默认值相关

场景一:
    变量a如果有内容,那么就输出a的变量值 
    变量a如果没有内容,那么就输出默认的内容 

格式:
    ${变量名:-默认值} 

套餐示例: 

    如果我输入的参数为空,那么输出内容是 "您选择的套餐是: 套餐 1" 

    如果我输入的参数为n,那么输出内容是 "您选择的套餐是: 套餐 n"
#!/bin/bash 
# 套餐选择演示 
a="$1" 
echo "您选择的套餐是: 套餐 ${a:-1}"
场景二:
    无论变量a是否有内容,都输出默认值 

格式:
    ${变量名+默认值} 

场景示例: 
    不管我说国家法定结婚年龄是 多少岁,都输出 国家法定结婚年龄(男性)是 22 岁
#!/bin/bash 
# 默认值演示示例二 
a="$1" 
echo "国家法定结婚年龄(男性)是 ${a+22} 岁"

你可能感兴趣的:(「 SHELL 」基础知识)