当前位置: 首页 > news >正文

shell基础学习

文章目录

  • 查看shell解释器
  • 写hello world
  • 多命令处理执行
  • 变量
    • 常用系统变量
    • 自定义变量
    • 撤销变量
    • 静态变量
    • 变量提升为全局环境变量
  • 特殊变量
    • $n
    • `$#`
    • $* $@
    • $?
  • 运算符:
  • 条件判断
    • 比较
  • 流程控制语句
    • if
    • case
    • for 循环
    • while 循环
  • read读取控制台输入
    • 基本语法:
  • 函数
    • 系统函数
      • basename
      • dirname
    • 自定义函数
  • shell 工具
    • cut
    • sed

查看shell解释器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ieZRfUSg-1677309668830)(../images/Pasted%20image%2020230225100639.png)]

查看系统默认shell解释器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iZRGiMiG-1677309668831)(../images/Pasted%20image%2020230225104422.png)]

垃圾火狐:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-19Ecqc52-1677309668831)(../images/Pasted%20image%2020230225100723.png)]

写hello world

#!/bin/bash (指定shell解析器)#注释
echo "hello world"

执行:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i8SK6sMU-1677309668831)(../images/Pasted%20image%2020230225104746.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1EGPo9Zf-1677309668832)(../images/Pasted%20image%2020230225104833.png)]

多命令处理执行

#!/bin/bash
cd /root/leanshell/
touch banzhang.txt
echo "i love cls" >> banzhang.txt

变量

变量名称可以是字母,数字下划线,不能以数字开头
在bash中变量默认是字符串类型,不能直接进行数值运算.

变量的值有空格,需要使用双引号或者单引号括起来.

显示当前shell所有变量

常用系统变量

$HOME $PWD $SHELL $USER

自定义变量

变量名=值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YMaL3GFi-1677309668832)(../images/Pasted%20image%2020230225105641.png)]

等号两边没有空格

撤销变量

unset 变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aFHHi9KX-1677309668832)(../images/Pasted%20image%2020230225105915.png)]

静态变量

readonly 变量
静态变量是不能unset的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uZmAhX2C-1677309668832)(../images/Pasted%20image%2020230225110021.png)]

变量提升为全局环境变量

这样变量就可以提供给其他的shell程序使用了
export 变量名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y5Ohc3J0-1677309668833)(../images/Pasted%20image%2020230225112518.png)]

特殊变量

$n

$n : n 是数字, $0 表示该脚本的名称, $1-9代表第一到第九个参数(命令行参数). 十以上的参数可以这样表示: ${10}

#!/bin/bash
echo $0 $1 $2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W7qgugLL-1677309668833)(../images/Pasted%20image%2020230225113843.png)]

$#

获取所有输入参数的个数,常用来循环

#!/bin/bash
echo $0 $1 $2
echo $#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e4Z8wQvv-1677309668833)(../images/Pasted%20image%2020230225114010.png)]

$* $@

$* :变量代表命令行中所有的参数, $*把所有的参数看成一个整体.

$@ : 代表命令行中的所有参数, $@把每一个参数区分对待.

#!/bin/bash
echo $0 $1 $2
echo $#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l25Cgs8Q-1677309668833)(../images/Pasted%20image%2020230225114315.png)]

$?

最后一次执行命令的返回状态. 如果这个变量是0 ,证明上一个命令执行正确; 如果变量的值非零, (具体哪一个数,由命令自己来决定),则证明上一个命令执行不正确.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KgQHn0ja-1677309668834)(../images/Pasted%20image%2020230225114551.png)]

运算符:

  • $((运算式))$[运算式]
  • expr +,-,*,/,%
    注意:expr运算符前后有个空格
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ejNnwH7-1677309668834)(../images/Pasted%20image%2020230225122846.png)]

表示2+3*4
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDJbcgNc-1677309668834)(../images/Pasted%20image%2020230225123928.png)]

条件判断

[ condition ] 
# condition前后有空格

比较

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UrwN7P89-1677309668834)(../images/Pasted%20image%2020230225124226.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1NMqJ4LL-1677309668835)(../images/Pasted%20image%2020230225124348.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zO1ggTsF-1677309668835)(../images/Pasted%20image%2020230225124456.png)]

流程控制语句

if

if [ 条件判断式 ];then程序
fi
或者
if [ 条件判断式 ]then程序
fi

if [ 条件判断式 ]条件判断表达式前后有空格, if之后有空格

#!/bin/bash
if [ $1 -eq 1 ]thenecho "simple 1 "
elif [ $1 -eq 2 ]thenecho "simple 2 "
fi

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l7RnidYk-1677309668835)(../images/Pasted%20image%2020230225130026.png)]

case

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vDmUkrUy-1677309668835)(../images/Pasted%20image%2020230225142752.png)]

#!/bin/bash
case $1 in1)echo "simple1"
;;2)echo "simple2"
;;*)echo "none"
;;
esac

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bkRSF5qW-1677309668836)(../images/Pasted%20image%2020230225143032.png)]

for 循环

语法一:
for 变量 in 值1 值2 值3 …(可以是一个文件等)do程序done这种语法中for循环的次数,取决于in后面值的个数(空格分隔),有几个值就循环几次,并且每次循环都把值赋予变量。也就是说,假设in后面有三个值,for会循环三次,第一次循环会把值1赋予变量,第二次循环会把值2赋予变量,以此类推。语法二:
for (( 初始值;循环控制条件;变量变化 ))do程序done语法二中需要注意:
初始值:在循环开始时,需要给某个变量赋予初始值,如i=1;循环控制条件:用于指定变量循环的次数,如i<=100,则只要i的值小于等于100,循环就会继续;变量变化:每次循环之后,变量该如何变化,如i=i+1。代表每次循环之后,变量i的值都加1。
#!/bin/bash
sum=0
for((i=1;i<=100;i++))
dosum=$[$sum+$i]
doneecho $sum

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n4NDuaDv-1677309668836)(../images/Pasted%20image%2020230225143744.png)]

#!/bin/bash
for i in $*
doecho $i
done

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PRZVYSF0-1677309668836)(../images/Pasted%20image%2020230225144054.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FWIYIvhx-1677309668836)(../images/Pasted%20image%2020230225144308.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DFXpzmjv-1677309668837)(../images/Pasted%20image%2020230225144326.png)]

while 循环

while [ 条件判断式 ]do程序done
#!/bin/bash
i=1
s=0
while [ $i -le 100 ]
#如果变量i的值小于等于100,dos=$(( $s+$i ))i=$(( $i+1 ))done
echo "The sum is: $s"

read读取控制台输入

基本语法:

read(选项)(参数)
选项:
-p :指定读取值时的提示符
-t :指定读取值时等待时间(秒)
参数:
指定读取值的变量名
(用来存变量的)

#!/bin/bash
read -t 7 -p "Enter your name: " Name
echo $Name

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gjyo4hy7-1677309668837)(…/images/Pasted%20image%2020230225144938.png)]

函数

系统函数

basename

就是在文件路径中,的到文件的名称

basename[string /pathname][suffix]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BduiOlRe-1677309668837)(../images/Pasted%20image%2020230225145428.png)]

看例子就懂了

dirname

dirname 文件绝对路径

去掉文件名后,返回路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EmC0cT36-1677309668837)(../images/Pasted%20image%2020230225145716.png)]

自定义函数

function 函数名 () {程序
}

要在函数调用之前声明函数

#!/bin/bash
function sum()
{s=0;s=$[ $1+$2 ]echo $s
}
read -p "nums1 " n1;
read -p "nums2 " n2;
sum $n1 $n2;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88oRm4kT-1677309668837)(../images/Pasted%20image%2020230225150632.png)]

shell 工具

cut


就是从一个文件中剪切需要的内容
基本语法:

cut [选项参数] filename

选项参数:
-f :列号,提取第几列
-d :分隔符,按照指定分割符分割列

例子
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IgpUWuPw-1677309668838)(../images/Pasted%20image%2020230225151006.png)]

sed

一个流编辑器
语法:

sed[选项参数] 'command' filename

选项参数
-e : 直接在指令列模式上进行sed的动作编辑

命令功能描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xg6d89UA-1677309668838)(../images/Pasted%20image%2020230225151319.png)]

示例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ffZ632Pv-1677309668838)(../images/Pasted%20image%2020230225151412.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zvWcqdsT-1677309668839)(../images/Pasted%20image%2020230225151502.png)]

相关文章:

shell基础学习

文章目录查看shell解释器写hello world多命令处理执行变量常用系统变量自定义变量撤销变量静态变量变量提升为全局环境变量特殊变量$n$#$* $$?运算符:条件判断比较流程控制语句ifcasefor 循环while 循环read读取控制台输入基本语法:函数系统函数basenamedirname自定义函数shel…...

考虑交叉耦合因素的IPMSM无传感器改进线性自抗扰控制策略

考虑交叉耦合因素的IPMSM无传感器改进线性自抗扰控制策略一级目录二级目录三级目录控制原理ELADRC信号提取龙格贝尔观测器方波注入simulink仿真给定转速&#xff1a;转速环&#xff1a;电流环&#xff1a;一级目录 二级目录 三级目录 首先声明一下&#xff0c;本篇博客是复现…...

2023年全国最新食品安全管理员精选真题及答案5

百分百题库提供食品安全管理员考试试题、食品安全员考试预测题、食品安全管理员考试真题、食品安全员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 41.《中华人民共和国食品安全法》第35条规定&#xff0c;以下&#xff0…...

git 笔记

简介 内容介绍 介绍git怎么管理和实现的 核心概念 文件名-hash-文件内容: 可以通过文件路径定位位置, 也可以通过hash定位位置;快照: 所谓一个快照其实就是一棵树, 叶子结点是一个hash,对应一个文件, 根节点对应文件夹; 一棵树就是一个快照;commit是tree, tree将文件串联, …...

ChatGPT 的盈利潜力:我使用语言模型赚取第一笔钱的个人旅程

使用 Fiverr、Python ChatGPT 和数据科学赚钱的指南。众所周知&#xff0c;ChatGPT 是 12 月发生的互联网突破性事件&#xff0c;几乎每个人都跳过了使用 AI 赚钱的潮流。在本文中&#xff0c;我将分享我是如何使用 ChatGPT 赚到第一笔钱的。本文包括以下主题&#xff1a;回到基…...

计算机网络——问答2023自用

1、高速缓冲存储器Cache的作用&#xff1f; 这种局部存储器介于CPU与主存储器DRAM之间&#xff0c;一般由高速SRAM构成&#xff0c;容量小但速度快&#xff0c;引入它是为了减小或消除CPU与内存之间的速度差异对系统性能带来的影响 &#xff08;Cache可以保存CPU刚用过或循环使…...

【1247. 交换字符使得字符串相同】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 有两个长度相同的字符串 s1 和 s2&#xff0c;且它们其中 只含有 字符 "x" 和 "y"&#xff0c;你需要通过「交换字符」的方式使这两个字符串相同。 每次「交换字符」的时候&…...

【一天一门编程语言】Lisp 语言程序设计极简教程

Lisp 语言程序设计极简教程 Lisp 是一种古老的编程语言,它的特点是拥有很高的表示能力和灵活的可扩展性,拥有大量的现成函数库,同时也是一种动态类型的语言,十分适合用来实现大规模软件系统。本文介绍了 Lisp 程序设计的基本知识,帮助读者快速上手。 一、Lisp 简介 Lis…...

全后端交互数据加密

前后端交互 通信请求使用https对请求参数进行签名&#xff0c;防止数据篡改对请求参数以及响应数据进行加解密app中使用ssl pinning防止抓包操作 https协议 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-78n9M2PH-1677252127361)(安全.assets/ht…...

稀疏特征和密集特征

在机器学习中&#xff0c;特征是指对象、人或现象的可测量和可量化的属性或特征。特征可以大致分为两类&#xff1a;稀疏特征和密集特征。 稀疏特征 稀疏特征是那些在数据集中不连续出现的特征&#xff0c;并且大多数值为零。稀疏特征的示例包括文本文档中特定单词的存在或不存…...

Linux网络TCP sticky分析工具

1 TCP粘包 - TCP_NODELAY TCP粘包&#xff08;sticky&#xff09;的表现是TCP nagle算法将应用层发送的多个包进行合并后&#xff0c;再发送&#xff0c;很容易出现burst导致bcm89230丢包。由于OABR不支持流控&#xff0c;所以需要使用Linux tc对对应的TCP port进行流量整形。 …...

华为OD机试题,用 Java 解【DNA 序列】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…...

python的所有知识点+代码+注释,不看就亏死了

目录 简介 特点 搭建开发环境 版本 hello world 注释 文件类型 变量 常量 数据类型 运算符和表达式 控制语句 数组相关 函数相关 字符串相关 文件处理 对象和类&#xff0c;注&#xff1a;不是那个对象&#xff01;&#xff01;&#xff01;&#xff01;&…...

读懂分布式事务

一、概述 1.1 什么是分布式事务 事务我们都很熟悉&#xff0c;事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元&#xff0c;组成这组操作的各个单元&#xff0c;要么全部成功&#xff0c;要么全部失败。 事务有四大特性&#xff1a; Atomic&#xf…...

多目标粒子群算法求解帕累托前沿Pareto,Pareto的原理,测试函数100种求解之21

目录 背影 parte前沿的定义 注意事项 基于多目标粒子群的帕累托前沿求解 主要参数 MATLAB代码 效果图 结果分析 展望 背影 在目标优化过程种,很多时候都两个或者多个目标,并且目标函数不能同时达到最优,鱼与熊掌不可兼得,这个时候可以通过求解帕累托前沿,通过帕累托前沿…...

数组:二分查找、移除数组等经典数组题

二分查找&#xff1a;相关题目链接&#xff1a;https://leetcode.cn/problems/binary-search/题目重现&#xff1a;给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值…...

负责任动物纤维标准RAF

【负责任动物纤维标准RAF】RAF-Responsible Animal Fiber, 中文翻译为负责任动物纤维标准。RAF标准包含了三个子标准&#xff0c;即RWS&#xff08;责任羊毛标准&#xff09;、RMS&#xff08;责任马海毛标准&#xff09;和RAS&#xff08;责任羊驼毛标准&#xff09;。RWS&…...

storybook使用info插件报错

报错内容: RangeErrorMaximum call stack size exceededCall StackprettyPrintvendors-node_modules_pmmmwh_react-refresh-webpack-plugin_lib_runtime_RefreshUtils_js-node_mod-4ff2dd.iframe.bundle.js:160:27undefinedvendors-node_modules_pmmmwh_react-refresh-webpack-…...

【每日一题Day129】LC1247交换字符使得字符串相同 | 贪心

交换字符使得字符串相同【LC1247】 有两个长度相同的字符串 s1 和 s2&#xff0c;且它们其中 只含有 字符 "x" 和 "y"&#xff0c;你需要通过「交换字符」的方式使这两个字符串相同。 每次「交换字符」的时候&#xff0c;你都可以在两个字符串中各选一个字…...

性能优化之node中间件耗时

背景 中间件在node框架中是很基本的套件&#xff0c;使用不当很容易对页面性能造成影响。除了node服务端外&#xff0c;前端做的SSR项目也要特别重视这块 哪些场景会造成中间件耗时特别严重&#xff1f; 罪魁祸首是&#xff1a;await阻塞 举个例子&#xff1a; 1.如何得到 …...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...