Shell 脚本入门

目录

一、Shell是什么

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

1.2 Shell的分类有哪些?

二、Shell脚本入门知识

2.1 Shell文件命名规范

2.2 Shell解析器

2.3 用Shell 编写hello World

三、Shell的四种变量类型

3.1 系统预定义变量

3.2 自定义变量

3.3 只读变量和撤销变量

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(具体是哪个数字,由命令自己决定),则证明上面命令不正确了 

例如下面这个例子:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/90647.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CNN(六):ResNeXt-50实战

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊|接辅导、项目定制 ResNeXt是有何凯明团队在2017年CVPR会议上提出来的新型图像分类网络。它是ResNet的升级版,在ResNet的基础上,引入了ca…

入门vue——创建vue脚手架项目 以及 用tomcat和nginx分别部署vue项目(vue2)

入门vue——创建vue脚手架项目 以及 用tomcat和nginx分别部署vue项目(vue2) 1. 安装npm2. 安装 Vue CLI3. 创建 vue_demo1 项目(官网)3.1 创建 vue_demo1 项目3.1.1 创建项目3.1.2 解决 sudo 问题 3.2 查看创建的 vue_demo1 项目3…

Mysql高阶语句 (一)

一、常用查询 (增、删、改、查) 对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。 例如只取 10 条数据、对查询结果进行排序或分组等等 1、按关键字排序 PS:类比于windows 任务管理器 使用 SELECT 语句…

QT基础教程之七Qt消息机制和事件

QT基础教程之七Qt消息机制和事件 事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件在对用户操作做出响应时发出&#xff0c…

windows 中pycharm中venv无法激活

1.用管理员身份打开Windows PowerShell 2.进入项目的:venv\Scripts 如:D: (1): cd .\project\venv\Scripts\ (2): 执行命令: Set-ExecutionPolicy RemoteSigned (3): 选择:Y (4): .\activate

小程序隐私保护授权处理方式之弹窗组件

欢迎点击关注-前端面试进阶指南:前端登顶之巅-最全面的前端知识点梳理总结 *分享一个使用比较久的🪜 小程序隐私保护授权弹窗组件 调用wx.getUserProfile进行授权时,返回错误信息:{errMsg: “getUserProfile:fail api scope is…

创作纪念日-我的第1024天

机缘 不知不觉已经成为创作者的第1024天啦… … 刚开始接触博客的初衷就是为了记笔记📒、记总结📝,或许对于当时就等同于是为了找工作。坚持学习并持续输出博客一年后,这时我发现再写博客,不在是为了找一份工作&…

如何利用SFTP协议远程实现更安全的文件传输 ——【内网穿透】

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《高效编程技巧》《cpolar》 ⛺️生活的理想,就是为了理想的生活! 文章目录 1. 安装openSSH1.1 安装SSH1.2 启动ssh 2. 安装cpolar2.1 配置termux服务 3. 远程SFTP连接配置3.1 查看生成的随机公…

机器学习:争取被遗忘的权利

随着越来越多的人意识到他们通过他们经常访问的无数应用程序和网站共享了多少个人信息,数据保护和隐私一直在不断讨论。看到您与朋友谈论的产品或您在 Google 上搜索的音乐会迅速作为广告出现在您的社交媒体提要中,这不再那么令人惊讶。这让很多人感到担…

【HSPCIE仿真】输入网表文件(3)子电路描述语句

子电路描述语句 1. 子电路的定义定义子电路的基本语法子电路终止语句子电路的调用语句全局节点(.gloab)示例 2. 基于子电路执行多次分析 HSPICE 允许用户在程序执行过程中调用由各种 HSPICE 元件和器件构成的子电路,即电路结构的层次化描述。 子电路是以 .SUBCKT 或…

MongoDB实验——MongoDB配置用户的访问控制

MongoDB 配置用户的访问控制 一、 实验原理 理解admin数据库:安装MongoDB时,会自动创建admin数据库,这是一个特殊数据库,提供了普通数据库没有的功能,例如,有些账户角色赋予用户操作多个数据库的权限&…