Shell 脚本入门

目录

一、Shell是什么

[1.1 我们为什么要学习Shell和使用Shell?](#1.1 我们为什么要学习Shell和使用Shell?)

[1.2 Shell的分类有哪些?](#1.2 Shell的分类有哪些?)

二、Shell脚本入门知识

[2.1 Shell文件命名规范](#2.1 Shell文件命名规范)

[2.2 Shell解析器](#2.2 Shell解析器)

[2.3 用Shell 编写hello World](#2.3 用Shell 编写hello World)

三、Shell的四种变量类型

[3.1 系统预定义变量](#3.1 系统预定义变量)

[3.2 自定义变量](#3.2 自定义变量)

[3.3 只读变量和撤销变量](#3.3 只读变量和撤销变量)

[3.4 特殊变量](#3.4 特殊变量)


一、Shell是什么

1.1 我们为什么要学习Shell和使用Shell?

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。

Shell 既是一种命令语言,又是一种程序设计语言

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务

Shell属于内置的脚本,程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理)语法简单,代码写起来比较轻松,简单易学(运维人员)

1.2 Shell的分类有哪些?

在linux中有很多类型的shell,不同的shell具备不同的功能,shell还决定了脚本中函数的语法,Linux中默认的shell是 /bash/shell ( 重点\默认 ),流行的还有 /bin/sh 、 /bin/bash 、 /usr/bin/sh 、 /usr/bin/bash 、 /bin/tcsh 、 /bin/csh

查看流行的shell使用以下指令:

cat /etc/shells

可以看到由以上类型的流行Shell

那么如何查看系统使用的Shell呢,使用以下指令即可:

echo $SHELL

可以看到我们系统使用的shell是/bin/bash类型的

二、Shell脚本入门知识

2.1 Shell文件命名规范

bash shell的默认后缀为 .sh

2.2 Shell解析器

#!/bin/bash

上面一行指定当前系统这个脚本要使用的shell解释器是/bin/bash

2.3 用Shell 编写hello World

首先来创建一个目录scripts来存放shell脚本

mkdir scripts

然后创建Shell文件

touch hello.sh

hello.sh文件的内容

#!/bin/bash

echo "Hello World!"

执行文件有三种方式

bash ./hello.sh #不需要加权限

sh ./hello.sh #不需要加权限

./hello.sh #需要加权限

如果是第三种方式运行需要加权限,使用以下命令即可

chmod +x hello.sh

三、Shell的四种变量类型

变量本质上其实是在内存中开辟一个空间用来临时存储数据,例如: age = 20

全局变量和局部变量的区别

  • 全局变量:层层嵌套的子bash依然可以访问
  • 局部变量:只在当前的bash中可以访问,子bash和父bash都不能访问呢

3.1 系统预定义变量

常用系统变量

HOME,PWD,SHELL,USER
env命令查看当前所有的全局变量

set查看当前所有变量

明显比env命令后得到的变量要多!

3.2 自定义变量

基本语法

定义变量:变量名=变量值
规则

  • 等号前后不能有空格
  • 在声明变量的时候是不需要添加 $ 符号,但是使用时候需要添加
  • 如果定义的是一个字符串,需要将值添加双引号或者单引号

温馨提示

查看定义的变量是全局还是局部

  • 全局: env | grep 变量名
  • 局部: set | grep 变量名

当然,你可以进入子bash中去尝试输出变量,无法输出则是局部变量,可以输出则是全局变量
全局变量

如何定义一个全局变量呢?需要先声明一个局部变量,然后再通过export 导出为一个全局变量

在子bash中修改全局变量,只会再当前环境中生效,不会影响父bash环境,哪怕是你增加 export 也依然不会影响到父bash环境
Shell脚本中使用变量

我们可以在 hello.sh 的脚本中去调用全局和局部变量

export 变量名

txt=10

export txt

#!/bin/bash

echo $txt

在shell脚本中使用变量,同样遵循全局和局部变量的规则

3.3 只读变量和撤销变量

只读变量

在shell中,只读变量相当于是常量,定义之后不允许修改。

定义规则

readonly 变量名=值

撤销变量

变量定义之后是可以撤销的,使用 unset 变量名 就可以撤销了

变量是可以撤销的,但是只读变量是不可以撤销的

3.4 特殊变量

在Shell中,存在一些特殊变量,他们具有特殊的意义

$n

$n 代表接受参数, n 是数字,代表在执行脚本时候传递的参数数量,例如 $1-$9 代表第一个到第九个参数,十以上的数字,可以使用大括号包裹,例如 ${10} 。比较特殊的是 $0 ,代表当前脚本名称

如下面这个例子n_test.sh:

#!/bin/bash

echo "=====$n====="

echo "1st:" $1

echo "2st:" $2

echo "3st:" $3

echo $0

注意:$0代表是该脚本的文件名

$#

$# 获取输入参数的个数,一般用于循环中,判断参数的个数是否正确,加强脚本的健壮性

例如下面这个例子:

#!/bin/bash

echo "=====$#====="

echo 1st:$1

echo 2st:$2

echo 3st:$3

echo $#

$* 和 $@

$* 和 $@ 非常相似,都代表命令行所有的参数,但是 $* 把参数看成是一个整体,例如 123 456 。而 $@ 把每个参数区分对待,例如 [123,456]

注意:在没有循环遍历时候,两者效果一致

例如下面这个例子:

#!/bin/bash

echo '=====$n====='

echo 1st:$1

echo 2st:$2

echo 3st:$3

echo '=====$*====='

echo $*

echo '=====$@====='

echo $@

$?

$? 最后一次执行命令的状态,如果是结果是0,证明上面执行的命令都是正确的,如果结果不是0(具体是哪个数字,由命令自己决定),则证明上面命令不正确了

例如下面这个例子:

相关推荐
五味香1 分钟前
Linux学习,ip 命令
linux·服务器·c语言·开发语言·git·学习·tcp/ip
朱容君1 小时前
Linux系统编程多线程之读写锁讲解
linux·开发语言
大风吹PP凉1 小时前
38配置管理工具(如Ansible、Puppet、Chef)
linux·运维·服务器·ansible·puppet
康熙38bdc2 小时前
Linux 进程间通信——共享内存
linux·运维·服务器
jwybobo20072 小时前
redis7.x源码分析:(3) dict字典
linux·redis
scoone2 小时前
ssh登陆服务器后支持Tab键命令补全
linux·shell
运维佬3 小时前
CentOS 9 配置网卡
linux·centos
轩轩曲觞阁3 小时前
Linux网络——网络初识
linux·网络
2401_840192273 小时前
python基础大杂烩
linux·开发语言·python
weixin_438197384 小时前
K8S创建云主机配置docker仓库
linux·云原生·容器·eureka·kubernetes