Linux Shell 基础教程⑧

ops/2024/12/25 14:52:23/

Shell 教程

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

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

Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。


在线体验网站

Shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。

由于习惯的原因,简洁起见,本文出现的 “shell编程” 都是指 shell 脚本编程,不是指开发 shell 自身。

第一个shell脚本

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。

输入一些代码,第一行一般是这样:
创建一个first.sh文件

vi first.sh
输入以下内容
#!/bin/bash
echo "Hello World !"

在这里插入图片描述

按i切换模式,然后输入内容,再按esc返回,按shift+: ,输入wq保存退出。

不懂操作vi的就返回去看

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

echo 命令用于向窗口输出文本。

然后我们cat查看first.sh的文件内容

在这里插入图片描述

运行 Shell 脚本有两种方法:

1、作为可执行程序

chmod +x ./first.sh  #使脚本具有执行权限
用ll 查看
./first.sh  #执行脚本

在这里插入图片描述

linux__PATH__firstsh__bin_sbin_usrbinusrsbin__PATH__PATH__testsh__firstsh__52">注意,一定要写成 ./first.sh,而不是 first.sh,运行其它二进制的程序也一样,直接写 first.sh,linux 系统会去 PATH 里寻找有没有叫 first.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./first.sh 告诉系统说,就在当前目录找。

2、作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/sh test.sh

在这里插入图片描述


Shell 变量

在 Shell 编程中,变量是用于存储数据值的名称。

定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:

your_name="baoge"

案例:
在这里插入图片描述
在这里插入图片描述

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

1.只包含字母、数字和下划线: 变量名可以包含字母(大小写敏感)、数字和下划线 _,不能包含其他特殊字符。

2.不能以数字开头: 变量名不能以数字开头,但可以包含数字。

3.避免使用 Shell 关键字: 不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。

4.使用大写字母表示常量: 习惯上,常量的变量名通常使用大写字母,例如 PI=3.14。

5.避免使用特殊符号: 尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。

6.避免使用空格: 变量名中不应该包含空格,因为空格通常用于分隔命令和参数。

有效的 Shell 变量名示例如下:

在原来first.sh文件操作
vi first.sh
NOOB="www.baidu.com"
LD_PATH="/bin/"
_var="123"
var2="zhangsan"

案例:
在这里插入图片描述
运行结果
在这里插入图片描述

无效的变量命名:

# 避免使用if作为变量名
if="some_value"
# 避免使用 $ 等特殊符号
variable_with_$=42
?var=123
user*name=runoob
# 避免空格
variable with space="value"

等号两侧避免使用空格:

# 正确的赋值
variable_name=value# 有可能会导致错误
variable_name = value

使用变量方法

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="baoge"
echo $your_name
echo ${your_name}

推荐给所有变量加上花括号,这是个好的编程习惯。

已定义的变量,可以被重新定义,如:

your_name="tom"
echo $your_name
your_name="baoge"
echo $your_name

这样写是合法的,但注意,第二次赋值的时候不能写 y o u r n a m e = " a l i b a b a " ,使用变量的时候才加美元符( your_name="alibaba",使用变量的时候才加美元符( yourname="alibaba",使用变量的时候才加美元符()。

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

下面的例子尝试更改只读变量,结果报错:


#!/bin/bashmyurl="www.baidu.com"
readonly myUrl
myurl="www.baoge.com"

案例
在这里插入图片描述

运行脚本,结果如下:
在这里插入图片描述

删除变量

使用 unset 命令可以删除变量。语法:

新建 txt.sh文件
vi txt.sh
chmod +x ./txt.sh  #使脚本具有执行权限
#!/bin/sh
name="zhangsan"
unset name
echo ${name}

变量被删除后不能再次使用。unset 命令不能删除只读变量。
案例
在这里插入图片描述

以上实例执行将没有任何输出。

在这里插入图片描述


课后练习

实操题一:Shell 脚本创建与运行

  • 题目要求

    1. 使用 vivim 编辑器创建一个名为 greeting.sh 的 Shell 脚本文件。
    2. 在脚本中,使用 echo 命令输出 “Today is a nice day!”。
    3. 设置该脚本的执行权限,并使用两种运行方式(作为可执行程序和作为解释器参数)运行该脚本,观察输出结果。
  • 操作步骤参考

    1. 打开终端,输入 vi greeting.sh 进入 vi 编辑器。
    2. 按下 i 键进入插入模式,输入以下内容:
#!/bin/bash
echo "Today is a nice day!"
3. 按下 `esc` 键退出插入模式,然后输入 `:wq` 保存并退出 `vi` 编辑器。
4. 给脚本添加执行权限:`chmod +x greeting.sh`。
5. 作为可执行程序运行:`./greeting.sh`。
6. 作为解释器参数运行:`/bin/sh greeting.sh`。

实操题二:Shell 变量操作

  • 题目要求

    1. 创建一个名为 var_operation.sh 的 Shell 脚本文件。
    2. 在脚本中定义一个变量 num,并赋值为 5
    3. 输出变量 num 的值。
    4. 将变量 num 的值重新定义为 10,再次输出变量 num 的值。
    5. 尝试将变量 num 定义为只读变量,然后再尝试重新赋值,观察结果。
  • 操作步骤参考

    1. 打开终端,输入 vi var_operation.sh 进入 vi 编辑器。
    2. 按下 i 键进入插入模式,输入以下内容:
#!/bin/bash
num=5
echo "The value of num is: $num"
num=10
echo "The new value of num is: $num"
readonly num
num=15  # 此行会导致错误
3. 按下 `esc` 键退出插入模式,然后输入 `:wq` 保存并退出 `vi` 编辑器。
4. 运行脚本:`./var_operation.sh`,观察输出结果以及错误提示(因为尝试修改只读变量)。

实操题三:综合运用 Shell 脚本与变量

  • 题目要求

    1. 创建一个名为 user_info.sh 的 Shell 脚本文件。
    2. 定义变量 name 为自己的姓名,变量 age 为自己的年龄,变量 hobby 为自己的爱好(均使用合适的变量名)。
    3. 在脚本中使用 echo 命令输出以下格式的信息:“My name is [姓名], I’m [年龄] years old and I like [爱好].”
    4. 尝试删除变量 age,然后再次输出上述信息,观察结果。
  • 操作步骤参考

    1. 打开终端,输入 vi user_info.sh 进入 vi 编辑器。
    2. 按下 i 键进入插入模式,输入以下内容:
#!/bin/bash
name="Your Name"
age=25
hobby="Reading"
echo "My name is $name, I'm $age years old and I like $hobby."
unset age
echo "My name is $name, I'm $age years old and I like $hobby."
3. 将 `name`、`age` 和 `hobby` 的值替换为自己的真实信息。
4. 按下 `esc` 键退出插入模式,然后输入 `:wq` 保存并退出 `vi` 编辑器。
5. 运行脚本:`./user_info.sh`,观察输出结果中第二次输出时年龄部分的变化(因为已删除该变量)。 

http://www.ppmy.cn/ops/144869.html

相关文章

redis库基础知识

redis库 Redis 是一个开源的内存数据库,提供了丰富的方法和命令来操作和管理数据库中的数据。下面是 Redis 库中一些常用的方法的介绍: set(key, value): 设置指定键的值get(key): 获取指定键的值delete(key): 删除指定的键和对应的值exists(key): 判断…

CSS学习记录19

CSS文本效果 CSS text-overflow 属性规定应如何向用户呈现未显示的溢出的内容。 //裁剪 text-overflow: clip; //隐藏 text-overflow: ellipsis; CSS字换行(Word Wrapping) CSS word-wrap 属性使长文字能够被折断并换到下一行。 如果一个单词太长而…

CICD篇之通过Jenkins中书写pipeline构建编译打包发布流程

1. Jenkins中Pipeline作用 在 Jenkins 中使用 Pipeline 来构建、打包、编译和发布代码的流水线,可以帮助团队实现自动化的持续集成与持续交付(CI/CD)。 我们可以通过 Jenkins Pipeline 管道,自动化执行从代码检出、构建、测试到发…

修改采购订单BAPI学习研究-BAPI_PO_CHANGE

这里是修改采购订单BAPI,修改订单数量和交货日期的简单应用 文章目录 修改数量代码运行结果 修改交货日期代码运行结果 修改数量 代码 *&---------------------------------------------------------------------* *& Report Z_BAPI_PO_CHANGE *&----…

网络安全(一)主动攻击之DNS基础和ettercap实现DNS流量劫持

alittlemc,个人原创,个人理解和观点。若有错误、不理解请与我联系,谢谢! 介绍了DNS的解析过程。DNS劫持的思路和实践。 DNS 域名 以为live.bilibili.com为例子,从后到前依次为顶级(一级)域名…

渗透测试学习路线

渗透测试学习之前基础: 计算机网络、操作系统(对Windows、Linux操作系统熟悉,对常用命令了解)、数据库、编程语言、web应用开发(前端后端) ⼊门级别的《Web安全渗透剖析》 进阶级别的《⽩帽⼦讲web安全》…

部署前后端分离若依项目--Window版本

1、准备条件 nssm,nginx,win11,后端jar包,前端html文件,可用的redis与mysql 2、后端启动 1、编写run.bat文件 echo off echo. echo run start echo.cd %~dp0set JAVA_OPTS-Xms256m -Xmx1024m -XX:MetaspaceSize12…

【蓝桥杯——物联网设计与开发】基础模块8 - RTC

目录 一、RTC (1)资源介绍 🔅简介 🔅时钟与分频(十分重要‼️) (2)STM32CubeMX 软件配置 (3)代码编写 (4)实验现象 二、RTC接口…