Shell脚本入门:编写格式与执行方式_猿童学的博客-程序员秘密_shell 脚本格式

技术标签: Shell脚本语言  linux  

目录

Shell脚本文件编写规范

Shell脚本HelloShell入门案例

Shell脚本文件的常用执行3种方式

         Shell脚本入门:多命令处理

         Shell变量:环境变量

Shell变量的介绍

Shell系统环境变量

         Shell变量:自定义变量

Shell自定义变量介绍

Shell自定义常量

         Shell变量:特殊变量

        特殊变量:$n

        特殊变量:$#

        特殊变量:$*、[email protected]

        特殊变量:$?

        特殊变量:$$


Shell脚本文件编写规范

脚本文件后缀名规范

shell脚本文件就是一个文本文件, 后缀名建议使用 .sh 结尾

首行格式规范

首行需要设置Shell解析器的类型, 语法

含义: 设置当前shell脚本文件采用bash解析器运行脚本代码

#!/bin/bash

注释格式

  • 单行注释, 语法
# 注释内容
  • 多行注释, 语法
:<<!
# 注释内容1
# 注释内容2
!

shell脚本HelloShell入门案例

  • 创建一个Shell脚本文件helloworld.sh,输出hello world字符串.

1、创建shell脚本文件

touch helloshell.sh

2、编辑文件

gedit helloshell.sh

3、增加shell脚本文件内容如下,并保存退出

#!/bin/bash
echo "hello shell"

4、执行脚本

sh helloshell.sh

效果

脚本文件的常用执行3种方式

  1. sh解析器执行方式

    语法: sh 脚本文件

    介绍: 就是利用sh命令执行脚本文件, 本质就是使用Shell解析器运行脚本文件

  2. bash解析器执行方式

    语法: bash 脚本文件

    介绍: 就是利用bash命令执行脚本文件, 本质就是使用Shell解析器运行脚本文件

  3. 仅路径执行方式

    语法: ./脚本文件

    介绍: 执行当前目录下的脚本文件

    注意: 脚本文件自己执行需要具有可执行权限, 否则无法执行

  • 执行脚本方式1-sh命令执行
sh helloshell.sh
  • 执行脚本方式2-bash命令执行
bash helloshell.sh
  • 执行脚本方式3-仅路径执行

       添加执行权限

chmod a+x helloshell.sh
./helloshell.sh

执行shell脚本文件有哪3种方式,并说明他们的区别?

sh执行脚本文件

bash执行脚本文件

仅路径执行脚本文件

区别: 前2种是解析器直接执行不需要可执行权限, 最后一种是脚本文件自己执行需要可执行权限


Shell脚本入门:多命令处理

多命令处理介绍

就是在Shell脚本文件中编写多个Shell命令

  • 已知目录/root/itheima目录,执行batch.sh脚本,实现在/yj/Shell/目录下创建一个one.txt,在one.txt文件中增加内容“Hello Shell”。

1、进入yj目录,执行创建/yj/itheima目录命令

mkdir /yj/Shell

2、创建/home/yj/batch.sh文件

touch batch.sh

3、编辑batch.sh文件,编写shell命令

gedit batch.sh

4、编写命令

命令1:创建/home/yj/Shell/one.txt文件

命令2:输出“I love Shell”字符串数据到one.txt文件中

#!/bin/bash
cd Shell    # 切换到Shell目录
touch one.txt  # 创建文件one.txt
echo "I love Shell">>/home/yj/Shell/one.txt  #输出数据到one.txt文件中

运行脚本效果

运行batch.sh脚本文件

sh batch.sh

查看one.txt文件内容

cat Shell/one.txt


Shell变量:环境变量

Shell变量的介绍

变量用于存储管理临时的数据, 这些数据都是在运行内存中的.

变量类型

  1. 系统环境变量

  2. 自定义变量

  3. 特殊符号变量

系统环境变量

介绍

是系统提供的共享变量.是linux系统加载Shell的配置文件中定义的变量共享给所有的Shell程序使用

Shell的配置文件分类

1.全局配置文件 /etc/profile /etc/profile.d/*.sh /etc/bashrc

2.个人配置文件 当前用户/.bash_profile 当前用户/.bashrc

一般情况下,我们都是直接针对全局配置进行操作。

环境变量分类

在Linux系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量。

系统级环境变量:Shell环境加载全局配置文件中的变量共享给所有用户所有Shell程序使用, 全局共享 用户级环境变量:Shell环境加载个人配置文件中的变量共享给当前用户的Shell程序使用, 登录用户使用

查看当前Shell系统环境变量

查看命令

env

查看Shell变量(系统环境变量+自定义变量+函数)

set

常用系统环境变量

变量名称 含义
==PATH== 与windows环境变量PATH功能一样,设置命令的搜索路径,以冒号为分割
HOME 当前用户主目录:/root
SHELL 当前shell解析器类型:/bin/bash
==HISTFILE== 显示当前用户执行命令的历史列表文件:/root/.bash_history
PWD 显示当前所在路径:/root
OLDPWD 显示之前的路径
HOSTNAME 显示当前主机名:itheima
HOSTTYPE 显示主机的架构,是i386、i686、还是x86、x64等:x86_64
==LANG== 设置当前系统语言环境:zh_CN.UTF-8

环境变量输出演示

4.常用环境变量

变量名称 含义
PATH 命令搜索的目录路径, 与windows的环境变量PATH功能一样
LANG 查询系统的字符集
HISTFILE 查询当前用户执行命令的历史列表


Shell变量:自定义变量

自定义变量介绍

就是自己定义的变量

分类

  1. 自定义局部变量

  2. 自定义常量

  3. 自定义全局变量

自定义局部变量

  • 介绍

就是定义在一个脚本文件中的变量, 只能在这个脚本文件中使用的变量, 就是局部变量

  • 定义与使用

定义语法

var_name=value

变量定义规则

  1. 变量名称可以有字母,数字和下划线组成, 但是不能以数字开头

  2. 等号两侧不能有空格

  3. 在bash环境中, 变量的默认类型都是字符串类型, 无法直接进行数值运算

  4. 变量的值如果有空格, 必须使用双引号括起来

  5. 不能使用Shell的关键字作为变量名称

演示

查询变量值语法

# 语法1: 直接使用变量名查询
$var_name
# 语法2: 使用花括号
${var_name}
# 区别: 花括号方式适合拼接字符串

  • 变量删除

语法

unset var_name

演示

自定义常量

介绍

就是变量设置值以后不可以修改的变量叫常量, 也叫只读变量

语法

readonly var_name

演示

 

自定义全局变量

父子Shell环境介绍

例如: 有2个Shell脚本文件 A.sh 和 B.sh

如果 在A.sh脚本文件中执行了B.sh脚本文件, 那么A.sh就是父Shell环境, B.sh就是子Shell环境

自定义全局变量介绍

就是在当前脚本文件中定义全局变量, 这个全局变量可以在当前Shell环境与子Shell环境中都可以使用

自定义全局变量语法

export var_name1 var_name2

案例需求

  • 测试全局变量在子Shell中是否可用, 在父Shell中是否可用

案例演示

  1. 创建demo2.sh和demo3.sh文件

  2. 编辑demo2.sh, 里面定义变量VAR4并设置为全局, 并里面执行demo3.sh脚本文件

    vim demo2.sh

  3. 编辑demo3.sh, 里面打印VAR4

    vim demo3.sh

  4. 执行脚本文件demo2.sh, 观察打印VAR4效

  5. 执行脚本文件后, 在交互式Shell环境打印VAR4, 观察打印VAR4效果

 

结论

全局变量在当前Shell环境与子Shell环境中可用, 父Shell环境中不可用

自定义变量进行增\删\改\查

定义和修改: var_name=value

查询:${var_name} 或 $var_name

删除: unset var_name


Shell变量:特殊变量

特殊变量:$n

语法

$n

含义

用于接收脚本文件执行时传入的参数
$0 用于获取当前脚本文件名称的
$1~$9, 代表获取第一输入参数到第9个输入参数
第10个以上的输入参数获取参数的格式: ${数字}, 否则无法获取

执行脚本文件传入参数语法

sh 脚本文件 输入参数1 输入参数2 ...

特殊变量:$#

语法

$#

含义

获取所有输入参数的个数

特殊变量:$*[email protected]

语法

$*
[email protected]
# 含义都是获取所有输入参数, 用于以后输出所有参数

$*[email protected]区别

1.不使用双引号括起来, 功能一样
  $*和[email protected]获取所有输入参数,格式为: $1 $2 ... $n
2.使用双引号括起来
  "$*"获取的所有参数拼接为一个字符串, 格式为: "$1 $2 ... $n"
  "[email protected]"获取一组参数列表对象, 格式为: "$1" "$2" ... "$n"
  使用循环打印所有输入参数可以看出区别

循环语法

for var in 列表变量
do      # 循环开始
   命令  # 循环体
done    # 循环结束

案例需求

在demo4.sh中循环打印输出所有输入参数, 体验$*[email protected]的区别

实现步骤

编辑demo4.sh脚本文件

增加命令: 实现直接输出所有输入后参数
增加命令: 使用循环打印输出所有输入参数

演示

  1. 编辑demo4.sh文件

  2. 直接输出所有输入参数, 与循环方式输出所有输入参数(使用双引号包含 $*[email protected] )

    #!/bin/bash
    # 命令1: 打印当前脚本文件名字
    echo "当前脚本文件名称:$0"
    ​
    # 命令2: 打印第1个输入参数
    echo "第一个输入参数:$1"
    ​
    # 命令3: 打印第2个输入参数
    echo "第二个输入参数:$2"
    ​
    # 命令4: 打印第10个输入参数
    echo "第十个输入参数不带花括号获取:$10"
    echo "第十个输入参数带花括号获取:${10}"
    ​
    # 命令5 打印所有输入参数的个数
    echo "所有输入参数个数:${#}"
    ​
    ​
    # 增加命令: 实现直接输出所有输入后参数
    echo '使用$*直接输出:'$*
    echo '使用[email protected]直接输出:'[email protected]
    ​
    # 增加命令: 使用循环打印输出所有输入参数
    echo '循环遍历输出$*所有参数'
    for item in "$*"
    do
       echo $item
    done
    echo '循环遍历输出[email protected]所有参数'
    for item in "[email protected]"
    do
       echo $item
    done

  3. 运行观察区别

特殊变量:$?

语法

$?

含义

用于获取上一个Shell命令的退出状态码, 或者是函数的返回值

每个Shell命令的执行都有一个返回值, 这个返回值用于说明命令执行是否成功

一般来说, 返回0代表命令执行成功, 非0代表执行失败

演示

输入一个正确命令, 再输出$?

输入一个错误命令, 在输出$?

特殊变量:$$

语法

$$

含义

用于获取当前Shell环境的进程ID号

演示

查看当前Shell环境进程编号

ps -aux|grep bash

输出 $$ 显示当前shell环境进程编号

小结

常用的特殊符号变量如下

特殊变量 含义
$n 获取输入参数的 $0, 获取当前Shell脚本文件名字 $1~$9, 获取第一个输入参数到第九个输入参数 ${10} 获取10和10以上的参数需要使用花括号
$# 获取所有输入参数的个数
$*[email protected] 获取所有输入参数数据 区别: 如果不使用双引号, 功能一样, 获取所有参数数据为一个字符串, 如果使用了双引号, [email protected]获取的就是参数列表对象, 每个参数都是一个独立字符串,
$? 获取上一个命令的退出状态码, 一般;来说0代表命令成功, 非0代表执行失败
$$ 获取当前shell环境进程的ID号

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_21402983/article/details/124071024

智能推荐

网络攻击分类(五类)_张朝阳的博客的博客-程序员秘密

一:被动攻击被动攻击是对信息的保密性进行攻击,窃取信息的来源以及数据,对信息加以查看。主要的攻击方式有窃听,嗅探等。对被动攻击采取的防范措施应该是阻止而不是检测。比如进行数据加密。二:主动攻击主动攻击是指攻击信息来源的真实性,数据传输的完整性以及系统服务的可用性。对截取的信息进行修改,添加或删除等操作。主要的攻击方式有欺骗,重放,假冒,拒绝服务和消息篡改等方式,对主动攻击采取的防范措施...

关于android性能,内存优化_android xjitthreshold_暖光的博客-程序员秘密

转:http://www.starming.com/index.php?action=plugin&v=wave&tpl=union&ac=viewgrouppost&gid=74&tid=20713&pg=1随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要 求远远高于PC的桌面应用程序。以上理由,足

Qt5.X 在Arm上LinuxFB平台旋转显示_unable to figure out framebuffer device. specify i_immortal018的博客-程序员秘密

1,修改Qt5源码:(1) 修改linuxfb/qlinuxfbscreen.h,如下所示:class QLinuxFbScreen : public QFbScreen{ Q_OBJECTpublic: QLinuxFbScreen(const QStringList &amp;amp;args); ~QLinuxFbScreen(); bool initializ...

不是技术牛人,如何应聘NB公司_应聘进公司技术差_华美乐章的博客-程序员秘密

无坚不摧——完整项目  “当他说他是OpenCC的作者的那一刻,哪个面试官不被秒杀。”  当然你不需要NB到这个程度。如果你能对面试官说:“我读书期间做的项目有x万行代码。Google关键字xxx可搜到该项目的演示视频”,就足够了。  程序员的所有技术能力都能在一个完整的项目中得到淋漓尽致的体现,因此胜过千言万语的自我推销。所谓的完整项目应该满足以下条件:  1、完整性。具有一定的

linux命令之tee_williamwang2013的博客-程序员秘密

tee 重定向输出到多个文件在执行Linux命令时,我们既想把输出保存到文件中,又想在屏幕上看到输出内容,就可以使用tee命令要注意的是:在使用管道线时,前一个命令的标准错误输出不会被tee读取。$ man teeNAME       tee - read from standard input and write to standard output an

Python qrcode二维码操作——(一)简单使用qrcode_python qrcode包的用法_创客老师Apple的博客-程序员秘密

既然我们是要对二维码进行创建和解析,那我们就必须先来认识一下什么是二维码:二维码是一种在一维码基础上扩展出来的可读性条码,用黑白矩形图案表示二进制数据;那么问题又来了,一维码又是什么?下面我们经常会在包装袋上面看到的条形码:这就是一维码,我们可以看见它是由长度相同,粗细不同的线条构成,那么他是什么存储数据的呢?那我们就要找不同点,粗细是他们的变量,即用宽度存储数据,这是一维方案;二维码就是在一...

随便推点

【量化投资】策略五(聚宽)_肥宅_Sean的博客-程序员秘密

简述这其实是在策略四的前一个版本。 这个是没有手动实现beta对冲的策略。风险会更大。收益会更低。代码# 导入函数库import statsmodels.api as smfrom statsmodels import regressionimport numpy as npimport pandas as pdimport timefrom datetime imp...

[源码和文档分享]基于汇编语言的学生成绩管理系统_chenju1968的博客-程序员秘密

一 需求分析 用汇编语言编写一个学生成绩管理系统,实现基本的学生成绩管理,功能包括成绩的录入,总分和平均分的计算,数据存档,从文件中读入数据等。要求程序界面友好,有输入界输出提示,有菜单等。 二 程序设计 2.1 程序总流程设计 ...

python批量ppt转图片,pdf转图片,word转图片脚本_进阶的大前端的博客-程序员秘密

前言某天我们运营在编辑后台的时候说每次上传ppt,pdf,word时都要把每个文件先导出一次图片,然后一个一个上传(png用作预览,ppt,pdf,word源文件不能直接下载的),说效率太低了,问有没有办法只要上传文件就行。当时就想了想每个上传都转一次确实效率低,因为有些导出来可能有几十张图片。最后通过GitHub和网友博客。最终把自动转图片问题解决。第一次写python脚本有错误不优雅的欢迎指出~本文python版本3.9.5需windows 平台,需安装Microsoft Office脚

计算机组成原理设计,计算机组成原理课程设计_weixin_39633493的博客-程序员秘密

1. 课程设计简介综合运用所学的计算机组成原理知识,掌握计算机各条指令运行的过程,设计并实现较为完整的计算机运算过程。设计并实现任意两个八位二进制数的原码一位乘法,实现带有符号位的运算。2. 实验设备TDN—CM+ 计算机组成原理实验教学系统一台, 排线若干。3. 总体思路(1) 完成接线, 实现基本的复杂模型机(2) 设计实现八位二进制数的原码一位乘法的汇编指令(3) 运行并调试程序4. 基本概...

react-router4实现异步按需加载模块_yujin0213的博客-程序员秘密

前言按需加载模块的目的是实现代码分割,用户打开首页时不用下载全部的代码,打开特定的页面加载特定的代码,可以提高用户体验实现在router4以前,我们是使用getComponent的方式来实现按需加载的,router4中,getComponent方法已经被移除。对于react-router4中实现路由按需加载,网上也有几种解决方案,比如借助react-loadable或者bundle-load...

推荐文章

热门文章

相关标签