Linux-初学者系列7_shell编程

在进行服务器集群管理时,需要编写shell程序来进行服务器管理。

shell是一个命令行解释器,他会为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户用shell启动、挂起、停止和编写一些程序。

一、shell脚本的执行方式

1、脚本格式要求

脚本以#!/bin/bash开头

#!/bin/bash

在这里插入图片描述

脚本需要有可执行权限

2、脚本常用执行方式

01-输入脚本的绝对路径或相对路径

要赋予脚本的+x权限,再执行脚本。

在这里插入图片描述

02-sh+脚本

不用赋予脚本+x权限,直接执行。

在这里插入图片描述

二、shell变量

1、变量介绍

Linux shell中的变量分为:系统变量和用户自定义变量。

01-系统变量
[root@bogon shcode]# echo $HOME
/root
[root@bogon shcode]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@bogon shcode]# echo $PWD
/root/shcode

显示当前shell中所有变量

set

在这里插入图片描述

在这里插入图片描述

02-shell变量的定义
1)基本语法

定义变量

变量名=值
[root@bogon shcode]# vim var.sh
#!/bin/bash
#定义变量A
A=100
#输出变量需要加上$
echo A=$A
[root@bogon shcode]# chmod u+x var.sh
[root@bogon shcode]# ll
总用量 8
-rw-r--r--. 1 root root 30 5月   7 10:52 hello.sh
-rwxr--r--. 1 root root 70 5月   7 11:17 var.sh
[root@bogon shcode]# ./var.sh
A=100

撤销变量

unset 变量

在这里插入图片描述

声明静态变量

readonly变量

注:不能unset。

在这里插入图片描述

小知识:

如果要找到第15行,显示行号

:nu

在这里插入图片描述

2)定义变量的规则
  • 变量名称可以由字母、数字、下划线组成,但是不能数字开头

    例如:5A=200(x)

  • 等号两侧不能由空格

  • 变量名称一般为大写

将命令的返回值赋给变量

反引号:运行里面的命令,并把结果返回给变量A
A=`zhang`
A=$(zhang)

在这里插入图片描述

三、设置环境变量

1、基本语法

export 变量名=变量值
//将shell变量输出为环境变量/全局变量

在这里插入图片描述

source 配置文件
//修改后的配置信息立即生效

在这里插入图片描述

echo $变量名
//查询环境变量的值

在这里插入图片描述

shell脚本的多行注释
:<<! 内容!

在这里插入图片描述

四、位置参数变量

在执行shell脚本时,如果希望获取到命令行的参数信息,可以使用到位置参数变量。

./myshell.sh 100 200

这就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息。

基本语法

语法描述
$nn为数字
$0代表命令本身, 1 − 9 代表第一到第九个参数,十以上的参数需要用大括号包含: 1-9代表第一到第九个参数,十以上的参数需要用大括号包含: 19代表第一到第九个参数,十以上的参数需要用大括号包含:{10}
$*命令行中所有的参数,$*把所有的参数看成一个整体
$@代表命令行中所有的参数,不过$@把每个参数区分对待
$#代表命令行中所有参数的个体

在这里插入图片描述

五、预定义变量

shell设计者事先定义好的变量,可以直接在shell脚本中使用。

基本语法

语法描述
$$当前进程的进程号PID
$!后台运行的最后一个进程的进程号PID
$?最后一次执行的命令的返回状态。
如果这个变量的值为0,证明上一个命令正确执行
如果这个变量的值为非0(具体数字,由命令自己来决定),则证明上一个命令执行不正确。

在这里插入图片描述

六、运算符

在shell中进行各种运算操作。

1、基本语法

01-第一种方式
"$((运算式))"

在这里插入图片描述

02-第二种方式
"$[运算式]"

在这里插入图片描述

03-第三种方式
expr m + n

expr运算符中间要有空格。

如果希望expr的结果赋给某个变量,使用反引号``。

expr \*,/,%
乘,除,取余

在这里插入图片描述

练习

在这里插入图片描述

七、条件判断

1、基本语法

#condition前后要有空格
[ condition ] 
#非空返回true,可以使用$?验证(0为true,>1为false)

2、判断语句

常用判断条件

01-字符串比较
=
02-两个整数的比较
语句描述
-lt小于
-le小于等于
-eq等于
-gt大于
-ge大于等于
-ne不等于
03-按照文件权限进行判断
语法描述
-r读的权限
-w写的权限
-x执行的权限
练习

在这里插入图片描述

3、流程控制

01 if判断

基本语法

if [ 条件判断式 ]
then
  代码
fi
if [ 条件判断式 ]
then
  代码
elif [ 条件判断式 ]
then
  代码
fi

注:[ 条件判断式 ],中括号和条件判断式之间必须有空格。

02 case语句

基本语法

case $变量名 in
"值1")
如果变量的值等于值1,则会执行程序1
;;
"值2")
如果变量的值等于值2,则会执行程序2
;;
...省略其他分支...
*)
如果变量的值都不是以上的值,则会执行此程序
;;
esac

在这里插入图片描述

03 for循环

基本语法1

for 变量 in 值1 值2 值3...
do
程序
done

在这里插入图片描述

基本语法2

for ((初始值;循环控制条件;变量变化))
do
程序
done

在这里插入图片描述

04 while循环

基本语法

while [ 条件判断式 ]
do
程序
done

在这里插入图片描述

八、read读取控制台输入

基本语法
read(选项)(参数)

选项

选项描述
-p指定读取值时的提示符
-t指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了

参数

变量:指定读取值的变量名

示例:

在这里插入图片描述

在这里插入图片描述

九、函数

shell编程和其他编程语言一样,有系统函数,也可以自定义函数。

1、系统函数

01 basename基本语法

返回完整路径最后/的部分,常用于获取文件名。

basename [pathname] [suffix]

用于获取文件名(不包括路径)。其中,pathname 表示要处理的文件路径,suffix 表示要从文件名中删除的后缀。

例如:

以下命令来获取该文件的文件名:

如果我们想要删除 .txt 后缀,可以使用以下命令

在这里插入图片描述

02 dirname基本语法

用于获取文件路径(不包括文件名)。

dirname [pathname]

pathname 表示要处理的文件路径。

在这里插入图片描述

2、自定义函数

基本语法
[function] funname[()]
{
  Action;
  [return int]
}
调用函数名:funname [值]

function 用于声明一个函数,函数名可以任意取名。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

股票量价关系基础知识7----图解各阶段量价关系:价涨量缩

图解各阶段量价关系&#xff1a;价涨量缩 价涨量缩是指股价上涨&#xff0c;成交量却萎缩的一种价量背离走势。它通常反映上涨力道不足&#xff0c;预示股价可能反转向下。 一、上涨初期的价涨量缩 &#xff08;一&#xff09;形态分析 股价经过一轮下跌后止跌回升&#xff0c…

VolSDF

Volume Rendering of Neural Implicit Surfaces&#xff08;VolSDF&#xff09;&#xff1a;神经隐式曲面的体渲染 摘要&#xff1a;一个神经隐式表面体积渲染框架&#xff0c;将体积密度建模为几何形状的函数来实现表面重建。定义的体积密度函数作为拉普拉斯的累积分布函数&am…

( 位运算 ) 190. 颠倒二进制位 ——【Leetcode每日一题】

❓190. 颠倒二进制位 难度&#xff1a;简单 颠倒给定的 32 位无符号整数的二进制位。 提示&#xff1a; 请注意&#xff0c;在某些语言&#xff08;如 Java&#xff09;中&#xff0c;没有无符号整数类型。在这种情况下&#xff0c;输入和输出都将被指定为有符号整数类型&a…

看大老如何用Postman+Jmeter实现接口实例

一、接口基础 为什么要单独测试接口&#xff1f; 1. 程序是分开开发的&#xff0c;前端还没有开发&#xff0c;后端已经开发完了&#xff0c;可以提前进入测试 2. 接口直接返回的数据------越底层发现bug&#xff0c;修复成本是越低的 3. 接口测试能模拟功能测试不能测到的异常…

Baklib知识库搭建平台产品操作手册

产品概述 Baklib是一款专业的知识库搭建平台&#xff0c;它帮助客户搭建内部知识库和对外帮助中心。在今天的信息时代&#xff0c;知识已经成为组织的核心竞争力&#xff0c;而Baklib正是为了帮助组织构建完整的知识体系&#xff0c;提高组织的核心竞争力而生。 Baklib具有以…

程序进制换算

进制数介绍 一、进制介绍 二进制 &#xff1a;0或1&#xff0c;满2进1&#xff0c;以0B或者0b开头&#xff0c;如 0b1101 八进制&#xff1a;0-7&#xff0c;满8进1&#xff0c;&#xff0c;以0开头&#xff0c;如0234 十进制&#xff1a;0-9&#xff0c;满10进1&#xff0c;…

阿里云服务器建站教程(5分钟网站上线)

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程&#xff1a; …

CLion安装(详细步骤+截图)

目录 一、CLion-2021.1.3.exe 下载 二、运行环境mingw-w64压缩包下载 三、 安装插件 ---- ide-eval-resetter-2.1.13压缩包下载 一、CLion-2021.1.3.exe 下载 Other Versions - CLion (jetbrains.com) 1、下载 2、更改路径 &#xff08;不要放在含有中文的路径下&a…

Qt+WebRTC学习笔记(七)ubuntu22.04下搭建coturn(STUN/TURN)

前言 因工作原因&#xff0c;很长时间没更新相关文档了&#xff0c;笔者之前测试时&#xff0c;一直使用示例自带的公网中转服务器。考虑到后期项目需要&#xff0c;笔者在线搭建一个coturn服务器测试&#xff0c;供有需要的小伙伴使用 一、安装coturn 若需要最新版本的cotu…

如何通过appuploader把ipa文件上传到App Store教程步骤

​ iOS APP上架App Store其中一个步骤就是要把ipa文件上传到App Store&#xff01;​ 下面进行步骤介绍&#xff01;​ 利用Appuploader这个软件&#xff0c;可以在Windows、Linux或Mac系统中申请ios和上传IPA到App Store Connect。​ 非常的方便&#xff0c;没有Mac也可以…

tiechui_lesson08_内存的分配和链表

主要是将链表结构的使用&#xff0c;在内核开发中使用起来比较方便的一种数据结构【LIST_ENTRY】。 一、内存的分配 主要是学习一些基本操作。现在推荐使用的动态分配函数【ExAllocatePoolWithTag】 PVOID tempbuffer ExAllocatePoolWithTag(NonPagedPool, 0x1000, xxaa); …

APP外包项目的线上维护方案

APP的使用已经非常普及&#xff0c;不论是2C还是2B的APP都已经渗透到了我们生活的方方面面&#xff0c;对于APP的开发公司来说APP项目的线上维护是一个非常重要的问题。如果APP项目比较重要而且用户规模比较大&#xff0c;那更需要专业的技术团队来维护。今天和大家分享这方面的…

计算机网络-SNMP协议与pysnmp

1.概念 2.典型架构 3.snmp的信息交互 4.MIB 4.1常见MIB节点 5.SNMP管理模型 MIB位于被管理进程 6.SNMP的三个版本 6.1 SNMPv1 6.2 SNMPv2C 6.3 SNMPv3 6.3.1 SNMP3的基本操作 6.3.2 SNMP交互GET 6.3.3 SNMP交互-GETBULK 6.3.4 SNMP交互-SET 6.3.5 SNMP交互-trap 6.3.6 SNMP交…

【技术干货】PCB焊盘设计之问题详解

SMT的组装质量与PCB焊盘设计有直接的关系&#xff0c;焊盘的大小比例十分重要。如果PCB焊盘设计正确&#xff0c;贴装时少量的歪斜可以再次回流焊纠正(称为自定位或自校正效应)&#xff0c;相反&#xff0c;如果PCB焊盘设计不正确&#xff0c;即使贴装位置十分准确&#xff0c;…

【 图像水印 2019 CVPR】 StegaStamp 论文翻译

【 图像水印 2019 CVPR】 StegaStamp 论文翻译 论文题目&#xff1a;StegaStamp: Invisible Hyperlinks in Physical Photographs 中文题目&#xff1a;物理照片中不可见的超链接 论文链接&#xff1a;https://arxiv.org/abs/1904.05343 论文代码&#xff1a;https://github.co…

Linux内核架构和工作原理

**前言&#xff1a;**作用是将应用层序的请求传递给硬件&#xff0c;并充当底层驱动程序&#xff0c;对系统中的各种设备和组件进行寻址。目前支持模块的动态装卸(裁剪)。Linux内核就是基于这个策略实现的。Linux进程1.采用层次结构&#xff0c;每个进程都依赖于一个父进程。内…

django基础知识详解

1. 安装与介绍 课程特点&#xff1a; 学习难度大&#xff0c;大部分内容需要理解并记忆文件较多易混淆学习阶段注重框架使用&#xff0c;工作阶段注重实现业务逻辑综合应用强&#xff0c;小练习少 1.1 Django框架的介绍 2005年发布,采用Python语言编写的开源web框架早期的时…

分享105个NET源码ASP源码,总有一款适合您

分享105个NET源码&#xff0c;总有一款适合您 源码下载链接&#xff1a;https://pan.baidu.com/s/1zFMIHX6juXdR2CaHMEr5mQ?pwdf5hz 提取码&#xff1a;f5hz 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载后…

每天一个提高效率的Matlab编程小技巧(1)-dbstop if error

相信在matlab调试程序的时候都遇到过这种情况&#xff1a;运行程序时命令行报错&#xff0c;而且出错的位置在我们自己定义的函数里&#xff0c;比如下面这个例子&#xff1a; 主函数main.m: a[1 2 3]; b[4 5]; csum_squares(a,b); 子函数sum_squares.m function csum_squa…

实验一 Python基础编程

实验一 Python基础编程 只为给原因学习编程的同学提供一个思路&#xff0c;让编程更简单&#xff01;&#xff01;&#xff01; 本博主擅长整理粉丝的私信&#xff01;只要你有需求就可以告诉博主&#xff01;博主可以帮你解决并发表&#xff01; 一、实验学时 2学时 二、实…