【Linux系统命令及shell脚本学习③】~第一个shell脚本

Linux系统命令及shell脚本学习

第三章 第一个shell脚本


前言

脚本语言是相对于编译型语言而言的,它是为了缩短编译型语言编写—编译—链接—运行(Edit-Compile-Link-Run)过程而创建的计算机编程语言。由于脚本语言常常运行于底层,所处理的是字节、整数、浮点数或其他机器层的对象,因而,脚本语言是低级程序设计语言。如C\C++、Ada、Java、C#等都属于编译型语言,也可称为高级程序设计语言,这类语言所编写的程序需要经过编译,将源代码转化为目标代码才能运行。而脚本语言往往是解释运行而非编译,即由解释器读入脚本程序代码,将其转换成内部的形式执行,而解释器本身则是编译型程序。

shell脚本语言是Linux/UNIX系统上一种重要的脚本语言,在Linux/UNIX领域应用极为广泛,熟练掌握Shell脚本语言是一个优秀的Linux/UNIX开发者和系统管理员的必经之路。利用Shell脚本语言可以简洁地实现复杂的操作,而且Shell脚本程序往往可以在不同版本的Linux/UNIX系统上通用。


一、创建脚本

使用Shell脚本的最初动机可能在于省去手动输入命令的麻烦,Shell脚本将一系列的Linux命令放在一个文件中,这样,我们就不必每次都手动输入同样的命令。

首先我们创建一个包含命令的文件,将其命名为”hello.sh",

atslcw@Lan:/mnt/e/Linux$ ls
712w  rhel-workstation-6.8-x86_64-dvd.iso  wer1  wer2
atslcw@Lan:/mnt/e/Linux$ touch hello.sh
atslcw@Lan:/mnt/e/Linux$ ls
712w  hello.sh  rhel-workstation-6.8-x86_64-dvd.iso  wer1  wer2
atslcw@Lan:/mnt/e/Linux$

在这里插入图片描述

“#!”符号称为“Sha-bang”符号,是Shell脚本的起始符号,“#!”符号是指定一个文件类型的特殊标记,它告诉Linux系统这个文件的执行需要指定一个解释器。“#!”符号之后是一个路径名,这个路径名指明了解释器在系统中的位置,对于一般的Shell脚本而言,解释器是bash,也可以是sh,即用下面的两种方式作为脚本的第1行都是正确的:

#! /bin/bash
#! /bin/sh

现在我们已经有了自己的脚本文件,接下来我们学习如何去运行它。

二、执行脚本

bash shell 脚本的方法有多种,我们掌握其中最常用的两种:

  1. 使文件具有可执行权限,直接运行文件。
  2. 直接调用命令解释器执行程序。
  3. 使用source执行文件。
    方法一:
atslcw@Lan:/mnt/e/Linux$ ls
712w  hello.sh  rhel-workstation-6.8-x86_64-dvd.iso  wer1  wer2
atslcw@Lan:/mnt/e/Linux$ chmod 777 hello.sh
atslcw@Lan:/mnt/e/Linux$ ./hello.sh
hello world!

方法二:

atslcw@Lan:/mnt/e/Linux$ bash hello.sh
hello world!
atslcw@Lan:/mnt/e/Linux$ sh hello.sh
hello world!

方法三:

atslcw@Lan:/mnt/e/Linux$ source hello.sh
hello world!

在确信你的脚本程序能够正确执行后,你可以把它从当前目录移到一个更合适的地方去。如果这个命令只供你本人使用,你可以在自己的家目录中创建一个bin目录,并且将该目录添加到你自己的PATH变量中。

三、shell变量

Shell变量的名称以一个字母或下划线符号开始,后面可以接任意长度的字母、数字或下划线。和许多其他程序设计语言不同的是,Shell变量名称字符并没有长度限制。Linux Shell并不对变量区分类型。一切值都是字符串,并且和变量名一样,值并没有字符长度限制。神奇的是,bash也允许比较操作和整数操作。其中关键因素是:变量中的字符串值是否为数字

2.1.变量赋值

在shell里,使用变量之前通常并不需要事先为它们做出声明。你只是通过使用它们(比如当你给它们赋初始值时)来创建它们。在默认情况下,所有变量都被看作字符串并以字符串来存储,即使它们被赋值为数值时也是如此。shell和一些工具程序会在需要时把数值型字符串转换为对应的数值以对它们进行操作。

变量赋值的方式为:变量名称=值,其中“=”两边不要有任何空格。当你想使用变量名称来获得值时,在名称前加上美元符号。例如,$a。当赋值的内容包含空格时,请加引号,例如:

atslcw@Lan:/mnt/e/Linux$ a=hello
atslcw@Lan:/mnt/e/Linux$ echo a
a
atslcw@Lan:/mnt/e/Linux$ echo $a
hello
atslcw@Lan:/mnt/e/Linux$ wer="hello world"
atslcw@Lan:/mnt/e/Linux$ echo $wer
hello world
atslcw@Lan:/mnt/e/Linux$

被一对双引号(“”)括起来的变量替换是不会被阻止的。所以双引号被称为部分引用,有时候又被称为“弱引用”。但是如果使用单引号的话(’ '),那么变量替换就会被禁止了,变量名只会被解释成字面的意思,不会发生变量替换。所以单引号被称为“全引用”,有时候也被称为“强引用”,例如:

atslcw@Lan:/mnt/e/Linux$ wer="hello world"
atslcw@Lan:/mnt/e/Linux$ echo '$wer'
$wer
atslcw@Lan:/mnt/e/Linux$ echo "$wer"
hello world
atslcw@Lan:/mnt/e/Linux$

2.2.用echo输出变量

1.echo命令

上面的例子中展示了echo的使用。echo命令的任务就是输出一行文本,格式为“echo [字符串 | $变量]”。多用于提示用户或产生数据。

2.常用的转义字符

为了能够更好地理解用户的表达,Shell解释器还提供了特别丰富的转义字符来处理输入的特殊数据。

4个最常用的转义字符如下所示。

  1. 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
  2. 单引号(‘’):转义其中所有的变量为单纯的字符串。
  3. 双引号(“”):保留其中的变量属性,不进行转义处理。
  4. 反引号(``):把其中的命令执行后返回结果。

转义字符可以表示程序中难以看得见或者难以输入的特殊字符。当echo遇到转义序列时,就会打印相应的字符。

echo支持的转义字符如下图所示。
在这里插入图片描述

3.常用环境变量

环境变量通常用来存储路径信息,Linux系统及其诸多应用程序的正常运行依赖于某些重要的环境变量的正确设置。

下表列出了常用的环境变量在这里插入图片描述

在这些变量中,PATH变量中存储有一系列路径,路径中以冒号(:)分隔开。格式例如:

atslcw@Lan:/mnt/e/Linux$ echo $PATH
/home/atslcw/.vscode-server/bin/c3511e6c69bb39013c4a4b7b9566ec1ca73fc4d5/bin/remote-cli:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files/TortoiseSVN/bin:/mnt/c/Program Files/Java/jdk1.8.0_131/jre/bin:/mnt/c/Program Files/nodejs/:/mnt/c/Program Files (x86)/HP/Common/HPDestPlgIn/:/mnt/c/Program Files (x86)/HP/IdrsOCR_15.3.1129.0/:/mnt/c/Program Files/Pandoc/:/mnt/c/Program Files/Microsoft SQL Server/130/Tools/Binn/:/mnt/e/lamp/apache24/bin:/mnt/c/Program Files (x86)/MySQL/MySQL Utilities 1.3.6/:/mnt/c/Program Files (x86)/MySQL/MySQL Utilities 1.3.6/Doctrine extensions for PHP/:/mnt/c/Program Files/Microsoft VS Code/bin:/mnt/c/Users/ASUS/AppData/Local/Programs/Python/Python310/Scripts/:/mnt/c/Users/ASUS/AppData/Local/Programs/Python/Python310/:/mnt/c/Users/ASUS/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/ASUS/AppData/Roaming/npm:/mnt/c/Program Files (x86)/HP/Common/HPDestPlgIn/
atslcw@Lan:/mnt/e/Linux$ echo $PWD
/mnt/e/Linux
atslcw@Lan:/mnt/e/Linux$ echo $LOGNAME
atslcw

PS1/PS2变量可以改变Shell的提示符。默认情况下,普通用户的提示符是“$”,root用户的提示符是“#”。可以通过修改这两个变量让Shell的交互界面更友善。

总结

以上就是本次全部内容,主要学习了SHELL脚本的创建和执行过程,并简单了解shell程序的变量操作。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值