linu基础之shell命令:变量

简介

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。Shell 是用C语言编写的程序,其可以对Linux系统进行交互,可以方便用户对于一些重复的行为进行编写,然后对linux中的某些行为进行操作。(有点像是windows中的bat文件)

Shell是一个命令解释器,它为用户提供了一个向Linux内核发送的请求以便运行的程序的界面系统程序,毕竟用户很难用计算机语言与计算器内核进行交互(用0或者1进行数据表达)。

shell 格式要求

shell文件名规范

Shell 脚本都是以.sh后缀结尾,但是linux没有文件格式一说,比如test.sh 可以运行,你写成test也可以运行,但是为了方便对这个文件的作用了解,一般都会加上.sh 后缀。

对Shell文件的命名,一般最后直观写,也是方便知道这个sh文件的作用,最好不要用a,b,c等命名,比如用:install_python.sh等,这样很直观的看出这个sh文件本身就是一个插入python的脚本。

shell文件的输入格式

具体格式如下:

#!/bin/bash
#Author: xxx
#Created Time: xxxxx
#Script Description: xxx
符号 解释
#! 特殊写法(记住),例如#!/bin/bash 指定该脚本是运行解析由/bin/bash来完成的
# 单行注释 下面三行是为这个sh进行的详细描述(不写也能运行,不过一般为了明白都写)
:<<! 多行注释内容 ! 多行注释的符号,看着很奇怪,不过记住就行,毕竟我们只能尊重他人规范

shell 变量

shell 变量分为:系统变量和用户自定义变量。

  • 系统变量:

    • H O M E , HOME, HOME,SHELL,$USER等,用echo可以打印其值,比如 :echo $USER

    • 如果想看shell中所有变量可以使用:set

  • 自定义变量

    • 定义的格式很简单:变量名(一般习惯用大写字母)=值,比如:A=100;

      注意:1:= 号两侧不可以有空格,不然这个声明变量不会成功,同样运行sh文件的时候不会报错

      ​ 2:命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。中间不能有空格,可以使用下划线 _。不能使用标点符号。不能使用bash里的关键字(可用help命令查看保留关键字)。

    • 撤销变量:unset 变量

    • 声明只读变量:readonly变量,只读变量不能使用unset 撤销

演示一下声明变量

# 第一步:如果有需要先创建一个存放shell文件的文件夹
# 第二步:cd 到目标文件夹  vim 文件名.sh
#输入下面信息

在这里插入图片描述

一般新建的sh文件,是没有执行权限的,所以 执行 sh 文件有两种方式。
在这里插入图片描述

  • 没有执行权限

    sh 路径/文件.sh  (如果在当前路径下的话 也可以直接  sh 文件.sh)
    
  • 有执行权限

    #如果没有可以直接赋予执行权限
    chmod o+u  文件.sh
    
    # 然后可以执行
    
    路径/文件.sh  (如果咋当前路径的话   ./文件.sh)
    

上面执行结果

可以看出如果声明变量的时候如果有空格,那么系统不会识别这个变量。

调用变量的时候需要前面有一个 符 号 。 如 果 字 符 串 + 符号。如果字符串+ +变量的话,可以用双引号包裹,但是如果用单引号的话,直接就是一个字符串。

补充:

如果将命令返回值赋值给变量。有两种写法:比如将其date命令赋值给A。

#使用的反引号,也就是数字1键左侧带有波浪线的那个键
A=`DATE`   

#用$()
A=$(date)

在这里插入图片描述

运行结果

在这里插入图片描述

unset释放数据,的效果如何 ?

在这里插入图片描述

执行结果

在这里插入图片描述

可以看出释放后,就没有这个数据了,所以命令窗口只是输出一行空行。

readonly格式如下:

readonly  A=2

#如果使用unset 释放A会报错,同时readonly声明的变量无法重新赋值。

设置环境变量

这个变量一般配置在 文件: 最常见的是在/etc/profile文件中进行配置。

基本语法:

  • 打开配置文件,然后加上:export 变量名=变量值

    这一步骤是将shell变量输出为环境变量(全局变量)

  • source 配置文件

    修改了变量,但是不会立即生效,所以需要进行刷新让其生效

  • 测试

    echo $变量

前面配置jdk的时候,就这样使用的如图:

在这里插入图片描述

在这里插入图片描述

位置参数变量

使用shell脚本时,有时候会为shell文件传递一些参数,类似与调用方法给方法形参进行赋值的感觉。

./test.sh   参数1,参数2……

而在shell文件中可以得到参数1,参数2……的参数信息。

而shell命令也有位置参数变量,为大家解决了这个问题。

位置参数 意思
$n n为数字,$0的意思就是命令本身。$1- 9 代 表 第 一 到 第 九 个 参 数 , 如 果 是 10 个 以 上 参 数 就 需 要 用 大 括 号 包 含 比 如 “ 9代表第一到第九个参数,如果是10个以上参数就需要用大括号包含比如“ 910{10}
$* 这个表示得到所有的参数,不过把所有的参数看成一个整体
$@ 这个变量也是得到所有的参数,不过这个是将参数区分对待
$# 表示参数的个数

这个如果只看上表中的描述可能会疑惑,所以现在进行还打吗演示。

在这里插入图片描述

执行后输入如下:

在这里插入图片描述

其中看着 ∗ 和 *和 #输出没有区别,后面聊循环的时候,就会了解其分开和整体的意思。

预定义变量

这种变量其实有点像是系统变量(环境变量),不过其无法进行修改,是设计shell命令的时候直接定义好的,而我们直接拿来用即可。

预定义变量 意义
$$ 当前进程的进程号(PID)
$? 最后一次执行的命令的返回状态。如果这个变量的值为 0,则证明上一条命令正确执行;如果这 个变量的值为非 0 (具体是哪个数由命令自己来决定),则证明上一条命令执行错误
$! 后台运行的最后一个进程的进程号(PID)

不在编辑sh文件直接在控制台演示了,如下:

在这里插入图片描述

Guess you like

Origin blog.csdn.net/u011863822/article/details/120772662