shell基础学习

news2024/9/29 17:38:38

文章目录

  • 查看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 ]
        then
                echo "simple 1 "
elif [ $1 -eq 2 ]
        then
                echo "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 in
 1)
        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++))
do
        sum=$[$sum+$i]
done

echo $sum

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

#!/bin/bash
for i in $*
do
        echo $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,
	do
		s=$(( $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)]

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

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

相关文章

FL StudioV21电脑版水果编曲音乐编辑软件

这是一款功能十分丰富和强大的音乐编辑软件&#xff0c;能够帮助用户进行编曲、剪辑、录音、混音等操作&#xff0c;让用户能够全面地调整音频。FL水果最新版是一款专业级别的音乐编曲软件&#xff0c;集合更多的编曲功能为一身&#xff0c;可以进行录音、编辑、制作、混音、调…

计算机网络(六): HTTP,HTTPS,DNS,网页解析全过程

文章目录一、HTTP头部包含的信息通用头部请求头部响应头部实体头部二、Keep-Alive和非Keep-Alive的区别三、HTTP的方法四、HTTP和HTTPS建立连接的过程4.1 HTTP4.2 HTTPS五、HTTP和HTTPS的区别六、HTTPS的加密方式七、cookie和sessionsessioncookie八、HTTP状态码状态码200&…

【微信小程序】-- WXML 模板语法 - 数据绑定(九)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

DPDK系列之四DPDK整体框架分析说明

一、网络发展和DPDK 在上篇分析过网络应用对DPDK出现的影响。而具体体现在技术上&#xff0c;从最简单来看就是从C10K到c100K甚至更多。而相应的计算的发展也从挖掘单CPU的性能发展到了瓶颈&#xff0c;同样&#xff0c;对于网络设备也遇到了类似的问题。而目前解决问题的方法…

MySQL到Elasticsearch实时同步构建数据检索服务的选型与思考[转载]

前言 本文具体探讨 MySQL 数据实时同步到 Elasticsearch (以下简称 ES ) 技术方案和思考&#xff0c;同时使用一定篇幅介绍一些前置知识&#xff0c;从理论到实践&#xff0c;让读者更好的理解这块内容和相关问题。包括&#xff1a; 为什么我们要将数据从 MySQL 实时同步到 ES …

Day899.Join语句优化 -MySQL实战

Join语句优化 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于Join语句优化的内容。 join 语句的两种算法&#xff0c;分别是 Index Nested-Loop Join(NLJ) 和 Block Nested-Loop Join(BNL)。 发现在使用 NLJ 算法的时候&#xff0c;其实效果还是不错的&#xff0c…

【手把手一起学习】(五) Altium Designer 20 STM32核心板Demo----PCB封装库添加元件

1 PCB封装库添加元件 元件的PCB封装非常重要&#xff0c;关系到实际电子元件能否焊接到制作的电路板上。PCB封装的引脚顺序&#xff0c;引脚间距&#xff0c;焊盘大小&#xff0c;焊盘形状等都需要与元件实物严格对应&#xff0c;因此绘制PCB封装库时&#xff0c;需要参考元件…

在Windows上编译Nginx

《在Windows上编译Nginx》视频教程官方编译说明 Building nginx on the Win32 platform with Visual C 环境准备 1. Microsoft Visual Studio(Microsoft Visual C 编译器)&#xff0c;下载地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/。 2. Git(备用)&…

OSS存储使用之centOS系统ossfs挂载

以CentOS7系统为例 下载CentOS系统支持的ossfs工具的版本&#xff0c;以下载CentOS 7.0 (x64)版本为例&#xff0c;可以通过wget命令进行安装包的下载 wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_centos7.0_x86_64.rpm 也可以通过yum命令来进行安装包的下载 sud…

【网络原理9】HTTP响应篇

在前两篇文章当中&#xff0c;已经分别介绍了HTTP是什么&#xff0c;以及常见的请求头当中的属性。【网络原理7】认识HTTP_革凡成圣211的博客-CSDN博客HTTP抓包&#xff0c;Fiddler的使用https://blog.csdn.net/weixin_56738054/article/details/129148515?spm1001.2014.3001.…

excel格式调整:表格应用中格式刷技法汇总

格式刷很简单&#xff0c;点一下&#xff0c;就可以把格式复制到其他单元格、图形、文字上。但是格式刷的用法又不仅仅这么一点&#xff0c;它还可以实现快速隔行填色、隔行隐藏&#xff0c;实现“无损”合并单元格等。在excel中&#xff0c;位于开始菜单中左侧的格式刷&#x…

澜沧古茶再冲刺港交所上市:多项核心指标下滑,杜春峄为董事长

近日&#xff0c;普洱澜沧古茶股份有限公司&#xff08;下称“澜沧古茶”&#xff09;向港交所主板提交上市申请&#xff0c;中信建投国际、招商证券国际为其联席保荐人。据贝多财经了解&#xff0c;这已经是澜沧古茶第二次在港交所递表&#xff0c;此前曾于2022年5月30日在港交…

不同方案特性对比

特性对比项 2.4G 蓝牙 868M WIFI 通信速率 低 低 低 高 距离&#xff08;实用可靠&#xff09; 20米 10米 30米 15米 确定性 高 低 高 高 可靠性&#xff08;距离内&#xff09; 高 低 高 高 刷新一个标签时间&#xff08;通常&#xff09; 0.5-1s …

西北工业大学大学物理(I)下2019-2020选填考题解析

单选题12个&#xff0c;24分。1量子数考查前三个量子数由薛定谔方程决定&#xff0c;最后一个关于自旋的由狄拉克方程决定由这些量子数可以给出原子的壳层结构。考试其实考的不深&#xff0c;记住这个表就够了。2 书上18、19章量子物理的著名实验&#xff1a;光电效应&#xff…

如何安装和使用oecp工具?

运行环境&#xff1a;python3>3.7.9、sqlite>v3.7.17 下载安装与部署的要求&#xff1a; install abidiff (centos): yum install -y epel-release; yum install -y libabigail install createrepo: yum install -y createrepo install binutils: yum install -…

【Redis】初探Redis

【Redis】初探Redis 前言 很早之前写的文章&#xff0c;最近考虑到面试可能涉及到Redis&#xff0c;所以拿出来再看一遍 Redis概述 Redis是啥&#xff1f; Redis是Remote Dicitionary Server的缩写&#xff0c;翻译过来就叫做远程字典服务 是开源的、使用C完成的、支持网路…

推荐算法——NCF知识总结代码实现

NCF知识总结代码实现1. NeuralCF 模型的结构1.1 回顾CF和MF1.2 NCF 模型结构1.3 NeuralCF 模型的扩展---双塔模型2. NCF代码实现2.1 tensorflow2.2 pytorchNeuralCF&#xff1a;如何用深度学习改造协同过滤&#xff1f; 随着技术的发展&#xff0c;协同过滤相比深度学习模型的…

学习资料|常用的一些CMD运行命令,整理的比较齐全

CMD命令CMD命令&#xff1a;开始&#xff0d;>运行&#xff0d;>键入cmd或command&#xff08;在命令行里可以看到系统版本、文件系统版本&#xff09;appwiz.cpl&#xff1a;程序和功能calc&#xff1a;启动计算器certmgr.msc&#xff1a;证书管理实用程序charmap&#…

持续集成Jenkins (五)Jenkins API的使用(更新中)

前言目前&#xff0c;我们将要上线DevOps系统&#xff0c;面对未来可能需要对系统的二次开发和处于对系统的深入理解&#xff0c;我需要对Jenkins API有个比较熟悉的了解。在DevOps中&#xff0c;jenkins总是作为其中的一环集成到里面&#xff0c;它提供了几种语言的API,可以很…

如何在Wordpress中使用wp_nav_menu()在<li>及a标记中添加Class

我正在使用wp_nav_menu($args),我想将my_own_classCSS类名添加到<li>元素中以获得以下结果:<li classmy_own_class><a href>Link</a>怎么做&#xff1f;wp_nav_menu()在<li>标记中添加Class方法一&#xff1a;只需使用其他参数并为nav_menu_css_…