LInux shell编程之基础语法

news2024/11/26 12:48:21

目录

1、shell概述

1.1、查看Linux 提供的 Shell 解析器

1.2、bash 和 sh 的关系

1.3、查看系统(centos)默认使用的解释器

2、脚本的基础使用

2.1、脚本的格式

2.2、脚本的执行方式

方式一:采用 bash / sh + 脚本的相对路径或绝对路径(脚本无需可执行( +x )权限)

2.2.1、bash + 脚本的相对路径

2.2.2、bash + 脚本的绝对路径

方式二:直接输入脚本的绝对路径或相对路径执行脚本(要求脚本必须具有可执行权限+x)

2.2.3、给目标文件 tesh.sh 添加可执行权限

2.2.4、使用相对路径执行脚本

2.2.5、使用绝对路径执行脚本

方式三:在脚本的路径前加上“.”或者 source 执行脚本

2.3、Linux 中的单引号、双引号、反引号

2.3.1、单引号

2.3.2、双引号

2.3.3、反引号

3、变量

3.1、系统预定义变量

3.2、自定义变量

3.2.1、基本语法

3.2.2、变量定义规则

3.3、特殊变量

3.3.1、$n

3.3.2、$#

3.3.3、$* 与 $@

3.3.4、$?

1、shell概述

  • shell 是一个命令解释器,它接收应用程序/控制台命令。然后调用操作系统内核
  • shell 是一个功能强大的编程(脚本)语言,易编写、易调试、灵活性强

1.1、查看Linux 提供的 Shell 解析器

  • 命令:cat /etc/shells

1.2、bash 和 sh 的关系

  • 命令:ls -l /bin/sh

1.3、查看系统(centos)默认使用的解释器

  • 命令:echo $SHELL

2、脚本的基础使用

2.1、脚本的格式

  • shell 脚本一般已 .sh 后缀命名以示区别
  • shell 脚本内容以 #!/bin/bash 或 #!/bin/sh 开头 (指定解释器)

2.2、脚本的执行方式

方式一:采用 bash / sh + 脚本的相对路径或绝对路径(脚本无需可执行( +x )权限)

  • 说明:本质是 bash 解析器帮你执行脚本,所以脚本本身不需要执行 权限
2.2.1、bash + 脚本的相对路径
  • 命令:bash test.sh 或 bash ./test.sh 等价于 sh test.sh 或 sh ./test.sh

2.2.2、bash + 脚本的绝对路径
  • 命令:bash /home/testhadoop/test/scripts/test.sh 或 sh /home/testhadoop/test/scripts/test.sh

方式二:直接输入脚本的绝对路径或相对路径执行脚本(要求脚本必须具有可执行权限+x)

  • 说明:本质是脚本需要自己执行,所以需要执行权限。
2.2.3、给目标文件 tesh.sh 添加可执行权限
  • 命令:chmod +x test.sh 或者 chmod 755 test.sh

2.2.4、使用相对路径执行脚本
  • 命令:./test.sh
  • 注意:使用相对路径执行只能使用 ./test.sh 的方式执行,直接使用 test.sh 不能执行 ,因为test.sh 并没有添加到环境变量PATH里面,所以不能执行。

2.2.5、使用绝对路径执行脚本
  • 命令:/home/testhadoop/test/scripts/test.sh

方式三:在脚本的路径前加上“.”或者 source 执行脚本

  • 命令: . test2.sh 或 source test2.sh

现象:

  • 可以看出使用方式一和方式二执行,执行完成后在当前shell下使用命令:echo $test_var 得到变量test_var的值为空,而使用方式三执行脚本,执行完成后,可在当前的shell下获取到变量test_var的值。

原因:

  • 方式一和方式二,在当前的shell中打开了一个子shell来执行脚本内容,脚本执行结束,子shell关闭,回到父shell中(即当前的shell中)
  • 方式三,执行脚本是直接在当前的shell中执行的,没有开启子shell进程,这也是为什么我们每次在修改完/etc/profile 文件以后,需要使用 source 执行一下文件的原因。

区别:

  • 开子 shell进程 与不开子 shell 进程的区别就在于,环境变量的继承关系,子shell进程可以继承父shell进程的变量,而父shell进程不可见子shell进程的变量。
  • 注意:修改变量值只对当前shell以及其子shell生效,对父shell之上的层级不生效,包括修改全局变量。

2.3、Linux 中的单引号、双引号、反引号

2.3.1、单引号

说明:单引号属于强引用,它会忽略所有被引起来的字符的特殊处理,被引用起来的字符会被原封不动的使用,需要注意的是它不允许引用自身,即单引号内部不允许嵌套单引号。

单引号把其中的内容全部当做字符串处理,忽略内部所有的命令和特殊字符。

示例:

2.3.2、双引号

说明:双引号属于弱引用,它会对一些被引起来的字符进行特殊处理。

区别:双引号与单引号的区别在于其可以包含特殊字符(单引号直接输出内部字符串,不解析特殊字符;双引号内则会解析特殊字符);如果要忽略特殊字符,就可以利用\来转义,忽略特殊字符,作为普通字符输出。

示例:

2.3.3、反引号

说明:用来包含一个命令字符串,其中的命令会先执行,得到的结果会返回到当前层其他命令再执行;其作用与$(command)类似。

示例:遍历当前文件夹及其一级子文件夹的详细信息

3、变量

变量分类:

根据变量使用范围分为:

  • 全局变量
  • 局部变量

根据定义类型分为:

  • 系统变量
  • 自定义变量

3.1、系统预定义变量

1、常用系统变量

  • PATH、HOME、SHELL、USER
  • 注意:系统变量都是大写,自定义变量大小写不做要求,一般是小写。

2、常用操作

(1)查看系统变量的值

  • 方式:$系统变量名

如:查看系统变量HOME的值

  • echo $HOME

(2) 查看系统环境变量

  • 命令:env

(3) 查看当前shell中所有的变量,包括临时变量、自定义变量

  • 命令:set

3.2、自定义变量

3.2.1、基本语法

  • 定义变量:变量名=变量值;注意:=号前后不能有空格
  • 撤销/删除变量:unset 变量名
  • 声明静态变量:readonly 变量名; 注意:不能使用unset删除
  • 把局部变量变成全局变量:export 变量名

3.2.2、变量定义规则

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头;环境变量建议全部大写
  • 中间不能有空格,可以使用下划线_
  • 不能使用标点符号
  • 不能使用bash里的关键字(可以用help命令查看保留关键字)
  • 等号两侧不能有空格
  • 在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算
  • 变量的值如果有空格,需要使用双引号或单引号括起来

3.3、特殊变量

3.3.1、$n

功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,超过十个以 上的参数,需要用大括号包含,如${10}。

示例:

3.3.2、$#

功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及 加强脚本的健壮性

示例:

3.3.3、$* 与 $@

$* 功能描述:代表命令行中所有的参数,$* 不被双引号“”包含时,把每个参数单独区分,可对每个参数进行遍历;被双引号“”包含时,把所有的参数看成一个整体

$@ 功能描述:代表命令行中所有的参数,$@ 把每个参数单独区分,可对每个参数进行遍历

示例:

3.3.4、$?

功能描述:查看最后一次执行的命令的返回状态。

  • 如果这个变量的值为 0,证明上一 个命令正确执行;
  • 如果这个变量的值为非 0(具体值,由命令自己来决定),则证明 上一个命令执行有误。

示例:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode刷题记录】160. 相交链表

160 相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函…

沂水六景记 ——齐源堂主王志强撰文

沂水六景记 ——齐源堂主王志强 明清时期,非常流行“八景”。所谓“八景”,就是在本地众多的风景名胜之中,选定八个最有代表性的美景,分别取上悦耳动听的名字,然后分别题诗。这种给风景选美的做法,是文人…

ASP.NET基于TCP协议的简单即时通信软件的设计与实现

摘 要 即时通信(Instant Message),由于其具有实时性、跨平台性、成本低、效率高等优点而受到广泛的使用。设计并实现一个能够处理多用户进行实时、安全的即时通信系统具有较强的现实意义。即时通信的底层通信是通过SOCKET套接字接口实现的。当前的主流UNIX系统和微…

2W,3KVDC隔离 定电压输入,稳压单、双路输出DC-DC模块电源——TPI-2W 系列

TPI-2W系列产品是专门针对PCB上需要与输入电源隔离的电源应用场合而设计的。该产品适用于:1)输入电源的电压变化≤5%;2)输入输出之间要求隔离电压≥3000VDC;3)对输出电压稳定和输出纹波噪声要求高.

linux 安装openjdk-1.8

安装命令 yum install java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64查看安装路径 find / -name java 默认的安装路径 /usr/lib/jvm 查看到jre 以及java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64 配置环境变量 vim /etc/profile 添加的内容 export JAVA_HOME/usr/li…

网络工程师----第三天

HDLC帧格式及控制手段: ipv4到ipv6的过渡技术: 1、双栈技术:主机或路由器同时装有IPV4 和 IPV6两个协议栈,因此,主机既能和IPV4通信,也能和IPv6网络通信。IPv6和IPv4是功能相近的网络层协议,两者…

爱普生计时设备AUTOMOTIVE RA8900CE DTCXO RTC

主要特点出场已校准带有DTCXO的RTC,并且内部集成晶体单元高精度: 3.4 ppm 40 to 85 C(9 s/月.)时钟输出:1 Hz.1024 Hz.32.768 kHzI 2 C Interface: Fast mode (400 kHz)The l2C-Bus is a trademark ofNXP Semiconductors供电电压: 2.5-5.5 V(main),1.6-5.5 V(备份电…

SQL优化——统计信息

文章目录 1、统计信息1.1、表的统计信息1.2、列的统计信息1.3、索引的统计信息 2、统计信息重要参数设置3、检查统计信息是否过期4、扩展统计信息5、动态采样6、定制统计信息收集策略 只有大表才会产生性能问题,那么怎么才能让优化器知道某个表多大呢?这…

果园系统养殖游戏喂养偷菜种植浇水养成小程序

装扮 通过购买装扮场景切换不同的农场风格 土地升级 通过特定的材料对土地和房屋进行升级 日志 记录道具的使用数量及金币农作物的收入情况 幸运转盘 可用金币进行抽奖 宝箱开启 获得宝箱后可以通过金币开启 每日签到 每日签到获得奖励 系统公告 可以第一时间知道游戏的更新和…

Linux进阶--文本处理grep、sed、awk命令

目录 一、grep (1)用文件查找 二、正则表达式 三、sed命令 四、awk命令 grep、sed、awk可以称作linux里的三驾马车 一、grep grep:一种强大的文本搜索工具,它能使用正则表达式匹配模式搜 索文本,并把匹配的行打…

智能电视/盒子长文字输入困难?手把手教您解决这个难题!(电视盒子跨屏输入/打字,亲测有效!)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 解决方案 📒📝 方法一📝 方法二🎈 获取方式 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 在使用智能电视/电视盒子的时候,会遇到这样一个场景:需要输入一个很长的网址,或者是想要粘贴一段很长的文字。如何使用遥控器要完成…

【C语言】qsort()函数排序及其模拟实现,万物皆可排!

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1. 函数介绍 2. qsort举例排列整型变量 3. qsort举例排列结构型变量 3.1 按名字排序 3.1.1 srtcmp函数 3.2 按年龄排序 4. qsort函数模拟实现(采用冒泡的…

python怎么连接oracle

一:弄清版本,最重要!!! 首先安装配置时,必须把握一个点,就是版本一致!包括:系统版本,python版本,oracle客户端的版本,cx_Oracle的版本…

工作流 jbpm概述

文章目录 1 工作流概述2 jBPM概述3 jBPM开发环境搭建及其配置3.1 准备工作3.2 搭建jBPM开发环境3.3 加入jar包 总结 1 工作流概述 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使…

STM32 CAN过滤器细节

STM32 CAN过滤器细节 简介 每组筛选器包含2个32位的寄存器,分别为CAN_FxR1和CAN_FxR2,它们用来存储要筛选的ID或掩码 四种模式 模式说明32位掩码模式CAN_FxR1存储ID, CAN_FxR2存储哪个位必须要与CAN_FxR1中的ID一致 , 2个寄存器…

Linux网络配置和操作命令

网络配置命令 Linux系统中最常用的网络配置命令包括 ifconfig route 其中 ifconfig 用来查看和配置网络接口 通常是网卡 信息 包括网络接口设备的 IP 地址 掩码等 route 用来管理 Linux系统内核中的路由表 它最大的用途就是用来设定静态的路由表项 通常是在系统用 ifconfig 配…

内置管线升级到SBP,如何复用之前打包的AssetBundle

1)内置管线升级到SBP,如何复用之前打包的AssetBundle 2)安卓真机,在Unity 2021.3.31版本下Buffer数据异常 3)URP里CullResults.CreateSharedRendererScene下面的消耗 4)移动端是否支持曲面细分着色 这是第3…

Element——组件

element官网 https://element.eleme.cn/#/zh-CN/component/layout vscode格式化快捷键&#xff1a;shiftaltf table表格 <template><el-table:data"tableData"style"width: 100%"><el-table-columnprop"date"label"日期…

idea在controller或者service使用ctrl+alt+b进入方法后,如何返回到 进入前的那一层

idea在controller或者service使用ctrlaltb进入方法后&#xff0c;如何返回到进入方法的最外层 解决方案使用 ctrlalt ← /→← /→ 键盘上的左右键盘

Linux 搭建私有yum源仓库

一、环境准备 IP系统版本作用192.168.140.155CentOS 7.9.2009yum源仓库192.168.140.153CentOS 7.9.2009测试 准备两台服务器&#xff0c;一台作为yum源仓库&#xff0c;另一台作为测试使用。 二、搭建yum源服务器 &#xff08;无法连接外网的情况&#xff0c;需要去官网下载镜…