Linux Bash Shell 快速上手 - 上篇

shell/bash脚本命令教程 shell里的变量不需要指明变量类型,类似于python,可以直接进行声明和赋值。myage=18#声明一个变量myage,值为20等号前后是没有空格的变量没有类型之分,都默认为string类型,即myage=18和myage=“18”在使用的时候都是一样的直接$变量名${变量名}这两种方式都是可以的,第2种方式在变量名前后加上{},主要是可以界定变量名的范围。echoIam${myage}yearsold#输出为Iam18yearsold。...... 阅读详情

这篇是Bashe Shell快速上手的上半篇,下篇可以参考

Linux Bash Shell 快速上手 - 下篇

一.什么是Shell

Shell的中文意识为“壳”,这层壳套在kernel(内核)之外,是用户与Linux 操作系统之间交互的一个命令解释器,是用户与Linux操作系统之间的桥梁。

在这里插入图片描述

Linux Shell 种类非常多, 常见的有: Bourne Shell ( /usr/bin/sh
或/bin/sh )、 Bourne Again Shell ( /bin/bash )、 C Shell
( /usr/bin/csh )、 K Shell ( /usr/bin/ksh )、 Shell for Root
( /sbin/sh )等。 不同的 Shell 语言的语法有所不同,所以不能交换
使用。
最常用的 shell 是 Bash,也就是 Bourne Again Shell ,由于易用和
免费, Bash在日常工作中被广泛使用,也是大多数 Linux 系统默认
的 Shell 。

bash shell一般以sh作为脚本后缀,并且以#!/bin/bash作为脚本头,表示这是一个bash shell脚本。

在ubuntu系统中默认支持的是dash shell,所以需要更改为bash shell。

首先检测当前Linux使用的shell是否为bash:

ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Aug 12 14:29 /bin/sh -> dash

发现默认使用的是dash shell,所以要更改为bash shell:

sudo dpkg-reconfigure dash

选择no即可:

ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Apr 14 14:40 /bin/sh -> bash
  • hello.sh
#!/bin/bash
# this is arong's first shell
echo hello shell

使用./hello.sh或sh hello.sh执行脚本,输出:hello shell

二.变量定义

Bash Shell的变量定义十分简单,例如要定义一个数字A=1,只需要直接为A赋值即可,而不需要声明并定义类型。使用$A即可取到A的值。

  • type.sh
A=1
echo $A

SHELL常见的系统变量解析 :

  • $0 当前程序的名称
  • $n 当前程序的第 n 个参数 ,n=1,2…
  • $* 当前程序的所有参数 ( 不包括程序本身 )
  • $# 当前程序的参数个数 ( 不包括程序本身 )
  • $? 命令或程序执行完后的状态,一般返回 0 表示执行成功。
  • $UID 当前用户的 ID
  • $PWD当前所在的目录
  • 获取程序名并打印收集到的3个参数
#!/bin/bash
echo 程序名:$0
echo 第一个参数:$1 
echo 第二个参数:$2
echo 第三个参数:$3

输出:

root@iZbp12kno11kc9e34bktfaZ:~/shell_learn# sh type2.sh first second three
程序名:type2.sh
第一个参数:first
第二个参数:second
第三个参数:three

三.if语句

  • if.sh
#!/bin/bash
grade=$1
echo 输入成绩:$grade
if [ $grade -gt 100 -o $grade -le -1 ]
then
    echo 成绩不合法
elif [ $grade -ge 90 ]
then
    echo 成绩优秀
elif [ $grade -ge 80 ]
then
    echo 成绩良好
elif [ $grade -ge 60 ]
then
    echo 成绩中等
else
    echo 成绩不合格
fi

输出:

root@iZbp12kno11kc9e34bktfaZ:~/shell_learn# sh if.sh -101
输入成绩:-101
成绩不合法
root@iZbp12kno11kc9e34bktfaZ:~/shell_learn# sh if.sh 90
输入成绩:90
成绩优秀
root@iZbp12kno11kc9e34bktfaZ:~/shell_learn# sh if.sh 60
输入成绩:60
成绩中等
root@iZbp12kno11kc9e34bktfaZ:~/shell_learn# sh if.sh 50
输入成绩:50
成绩不合格

注意:if条件中需要[空格+条件+空格]之间的条件两边需要加上空格,不然会报错。

常用的逻辑判断关键词:

  • -f 判断文件是否存在 eg: if [ -f filename ]
  • -d 判断目录是否存在 eg: if [ -d dir ]
  • -eq 等于 应用于:整型比较
  • -ne 不等于 应用于:整型比较
  • -lt 小于 应用于:整型比较
  • -gt 大于 应用于:整型比较
  • -le 小于或等于 应用于:整型比较
  • -ge 大于或等于 应用于:整型比较
  • -a 双方都成立(and) 逻辑表达式 –a 逻辑表达式
  • -o 单方成立(or) 逻辑表达式 –o 逻辑表达式
  • -z 空字符串

判断输入的文件夹是否存在,不存在则创建:

  • if2.sh
#!/bin/bash
# 判断文件是否存在,不存在则新建(必须由root用户创建 pid=0)
DIR=$1
if [ ! -d $DIR ]
then
    echo $DIR不存在
    if [ `id -u` -eq 0 ]
    then
        echo 是ROOT用户,可创建文件
        mkdir -p $DIR
    else
        echo 非ROOT用户,不可创建文件
    fi
else
    echo $PID存在,退出程序
    exit 0
fi

四.循环操作

  • for.sh
#!/bin/bash
# 打印1-10的数字
for number in `seq 10`
do
    echo 打印数字:$number
done

输出:

打印数字:1
打印数字:2
打印数字:3
打印数字:4
打印数字:5
打印数字:6
打印数字:7
打印数字:8
打印数字:9
打印数字:10

从1累加到n

  • for2.sh
#!/bin/bash
read -p "输入从1累加到N中的N:" n
sum=0
for((i=1;i<=$n;i++))
do
sum=`expr $sum + $i`
done
echo $sum

输出:

root@iZbp12kno11kc9e34bktfaZ:~/shell_learn# sh for2.sh 
输入从1累加到N中的N:100
5050
  • while.sh
#!/bin/bash
# 使用while循环累计啊1-100
sum=0
i=0
while ((i<=100))
do
    sum=`expr $sum + $i`
    ((i++))
done
    echo 累积和:$sum
  • case.sh
#!/bin/bash
# 使用case语句来完成相应操作
echo '输入1、2、3将其打印'
read num
case $num in
    1) echo '打印:1'
    ;;
    2) echo '打印:2'
    ;;
    3) echo '打印:3'
    ;;
    *) echo '输入不合法'
    ;;
esac

输出:

root@iZbp12kno11kc9e34bktfaZ:~/shell_learn# sh case.sh 
输入1、2、3将其打印
3
打印:3
root@iZbp12kno11kc9e34bktfaZ:~/shell_learn# sh case.sh 
输入1、2、3将其打印
10
输入不合法
  • caseAndBreak.sh
#!/bin/bash
# 制造死循环,当输入为0时终止程序
while true
do
    read -p '输入数字为0则终止程序:' num
    case $num in
        0) echo '程序终止'
           break
        ;;
        *) echo '程序继续执行'
        ;;
    esac
done
  • select.sh
#!/bin/bash
# 在1、2、3之间进行选择
echo '请在1、2、3之间进行选择'
select num in 1 2 3
do
    if [[ $num != 1 && $num != 2 && $num != 3 ]]
    then
        echo '程序结束'
        break
    fi
    echo '你的选择为:'$num
done

输出:

root@iZbp12kno11kc9e34bktfaZ:~/shell_learn# sh select.sh
请在1、2、3之间进行选择
1) 1
2) 2
3) 3
#? 1
你的选择为:1
#? 2
你的选择为:2
#? 3
你的选择为:3
#? 4
程序结束

五.数组

在Bash Shell中只允许定义一维数组,并且在定义时不需要声明其大小,可以采用 a r r a y [ i n d e x ] 的方式来取出特定索引的值,也可以通过 {array[index]}的方式来取出特定索引的值,也可以通过 array[index]的方式来取出特定索引的值,也可以通过{array[]}的方式将其所有元素打印出来,用${#array[]}获取数组长度:

  • array.sh
#!/bin/bash
# 创建数组并遍历
# 第一种方式:array=(A B C D E)
# 第二种方式:
array[0]=A
array[1]=B
array[2]=C
array[3]=D
array[4]=E
echo '数组元素个数:'${#array[*]}
echo '数组元素打印:'${array[*]}
echo '第3个元素:'${array[2]}

输出:

root@iZbp12kno11kc9e34bktfaZ:~/shell_learn# sh array.sh
数组元素个数:5
数组元素打印:A B C D E
第3个元素:C

也可以结合for循环来遍历数组:

  • array2.sh
#!/bin/bash
array=(1 2 3 4)
for i in ${array[*]}
do
    echo $i
done

输出:

root@iZbp12kno11kc9e34bktfaZ:~/shell_learn# sh array2.sh
1
2
3
4
SPI为什么不需要加上拉电阻 大家好,我是记得诚。I2C因为其开漏的结构,无法输出高电平,所以外部加上拉电阻。我们在使用SPI的时候,发现是不需要加上拉电阻的。主要因为SPI多为推挽的结构,推挽电路,高低电平都可以输出,所以外部不需要加上拉电阻。推挽电路可以用2个三极管或者2个MOS管搭建而成。 阅读详情

相关推荐

ANSYS workbench (关于normal stiffness factor接触刚度因子)

关于normal stiffness factor接触刚度因子的含义和设置方法

weixin_43730845的博客 6809

shell入门编程教程(bash)

变量分为局部变量与环境变量(全局变量),环境变量每次重启也会消失,可以使用写入系统环境变量文件的方法来使每次开机时添加。单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。$ * 代表所有参数(作为整体)、$ @也为所有参数(作为离散个体)推荐使用(( )),两个小括号括起来的形式来表示里面的为数学运算。单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;$1 为第一个参数 、$2为第二个参数。为最后一条命令运行是都正确(0为正)

m0_50237690的博客 500

智能车赛道识别:八邻域算法的实战解析与优化

本文深入解析了智能车赛道识别中八邻域算法的核心原理与实战优化。作为兼顾性能与稳定性的经典方案,该算法通过模拟探险家环顾八方的策略,能精准追踪弯道与直道边界。文章详细拆解了代码逻辑,并提供了边界平滑、异常处理及应对十字路口、环岛等复杂场景的关键优化策略,助力开发者提升智能车视觉系统的鲁棒性与实时性。

weixin_29228781的博客 262

【Linux】Linux Bash Shell 教程

Linux bash(Bourne-Again SHell)是一种为GNU操作系统编写的命令行解释器,它是大多数Linux发行版中最常用的shell。Bash提供了一种强大的方式来控制和管理操作系统,支持命令历史记录、别名、管道、重定向、变量、条件判断、循环以及自定义脚本编写等功能,使得用户能够通过简单的命令行指令执行复杂的任务,是系统管理员和开发人员日常工作中的得力工具。

Young_Pro的博客 2503

Clock Gating设计陷阱:为什么你的ICG cell总是导致setup violation?(附解决方案)

本文深入分析了数字IC设计中ICG(Integrated Clock Gating)单元导致setup时序违规的常见问题,包括时钟偏斜和数据路径过长两大核心原因。通过量化分析影响因素,提供了逻辑重组、寄存器重定时等优化策略,并介绍了预防性设计方法和物理实现阶段的优化技巧,帮助工程师有效解决ICG相关的setup violation问题。

weixin_29168153的博客 206

AOA(Angle of Arrival,到达角)定位算法及其误差分析的原理和MATLAB仿真_aoa定位算法

如图所示,有基站 S 1 ( x 1 , y 1 , z 1 ) , S 2 ( x 2 , y 2 , z 2 ) S_1(x_1,y_1,z_1),S_2(x_2,y_2,z_2) S1​(x1​,y1​,z1​),S2​(x2​,y2​,z2​),目标 T ( x , y , z ) T(x,y,z) T(x,y,z)。2+(z_1-z_2)^2} step1:两基站间的距离L=(x1−x2)2+(y1​−y2​)2+(z1​−z2​)2。

2401_87555613的博客 1483

2025版最新Bash Shell入门指南,零基础入门到精通,收藏这篇就够了

Bash(Bourne Again SHell)是一种广泛使用的Unix和Linux shell,它提供了丰富的命令和脚本功能,使得用户可以高效地与系统交互。掌握Bash Shell不仅能提升你的工作效率,还能让你在处理复杂任务时更加得心应手。希望这篇文章能帮助你入门Bash,成为一名更优秀的程序员。

logic1001的博客 1535

​​​​手把手教你玩转RT-Thread操作系统专栏--​​​​第5章 设备驱动开发:RT-Thread的设备框架​​​​5.4 I2C/SPI驱动:如何驱动外部传感器(以MPU6050为例)​

通过本节学习,掌握了基于RT-Thread设备模型的I2C/SPI驱动开发流程,包括硬件初始化、寄存器读写、设备注册及应用程序调用。I2C(Inter-Integrated Circuit)和SPI(Serial Peripheral Interface)是嵌入式系统中最常用的两种串行总线协议,广泛用于连接传感器、存储器等外设。函数通过I2C协议读取外设寄存器的数据(如MPU6050的加速度寄存器)。SPI读取需先拉低片选(CS),发送寄存器地址,再读取数据,最后拉高CS。查找I2C设备,并调用。

xiaoheshang_123的博客 127

shell学习教程(超详细完整)_shell教程

变量名不能用数字开头#等号左右两侧不能有空格#变量的值如果有空格,必须用引号包含预定义变量作用最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非О(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。$$当前进程的进程号(PID)后台运行的最后一个进程的进程号(PID)先来看看”$?”这个变量,举个例子说明#ls命令正确执行#预定义变量“$?”的值是0,证明上一个命令执行正确。

2401_83946826的博客 3520

CATIA二次开发——遍历几何图形集下的轴系及控制轴系生成位置

CATIA二次开发——轴系相关问题1.遍历几何图形集下的轴系2.解决轴系生成位置的问题 1.遍历几何图形集下的轴系 近期遇到的问题:遍历轴系的时候发现,AxisSystem属性的轴系只有放在轴系集合下,才能被找到,放在几何图形集或其他位置均不能被找到。本来想遍历几何图形集下的轴系元素,但是发现没有对应的属性,只能查找 几何图形集、几何元素、草图等元素,无法直接遍历轴系。 解决办法:(加入选择集,在选择集中筛选轴系类型) HybridBody axisHB = activePart.HybridBodies

WorkMan的博客 2731

SpringBoot实现快速导入EXCEL

MaterialMonitorController.java @Log(title = "物料监测", businessType = BusinessType.IMPORT) @RequiresPermissions("system:materialMonitor:import") @PostMapping("/importData") @ResponseBody ...

LEN程序员的一生 4817

Linux Bash Shell 快速上手 - 下篇

文章目录一.运算符1.1、算数运算符1.2、关系运算符1.3、布尔运算符1.4、逻辑运算符1.5、字符串运算符1.6、文件测试运算符二.echo、printf、read与重定向2.1、echo2.2、printf2.3、read2.4、重定向三.test命令四.函数与文件包含4.1、函数4.2、文件包含五.特殊符号总结 这篇是Bashe Shell快速上手的下半篇,上篇可以参考 Linux Ba...

BoringError的博客 601

Python 爬虫 + 数据分析:社会调查数据抓取与结果可视化分析

在当今数字化时代,数据已成为推动社会发展的关键资源之一。无论是市场调研、学术研究还是政策制定,社会调查数据都扮演着至关重要的角色。通过 Python 爬虫技术,我们可以高效地获取这些数据,并结合数据分析与可视化工具,深入挖掘数据背后的价值。本文将通过一个完整的实战项目,带你掌握如何使用 Python 爬虫抓取社会调查数据,并进行可视化分析。

yansideyucsdn的博客 126

Linux Shell Script脚本(bash)一篇快速上手入门

基本语法号前后不能有空格,在shell中无需指定变量类型。有空格的情况可以使用引号,例如。属于局部变量,子shell不可见。导出变量自定义的变量默认局部变量,但是可以通过export语句导出为全局变量。修改变量修改变量值只对变量所在的shell及子shell生效,也就是说子shell的修改不会对父shell造成影响。语法#action;] }注意必须先声明函数和,才能调用。因为shell是逐行运行。函数返回值通过。

两份雪糕的博客 1661

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

shell脚本

http://www.runoob.com/linux/linux-shell.htmlShell 是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Shell 脚本(shell script),是一种为shell编写的脚本程序。 业界所

番薯大佬的专栏 715

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Linux基础之shell语法

概论 shell是我们通过命令行与操作系统沟通的语言。 shell脚本可以直接在命令行中执行,也可以将一套逻辑组织成一个文件,方便复用。 Terminal中的命令行可以看成是一个“shell脚本在逐行执行”。 Linux中常见的shell脚本有很多种,常见的有: Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again Shell(/bin/bash) C Shell(/usr/bin/csh) K Shell(/usr/bin/ksh) zsh … Linux系统中

victory_gx的博客 647

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

从按下电源开关到bash提示符

转自:http://users.cecs.anu.edu.au/~okeefe/p2b/chinese/power2bash.html 从按下电源开关到bash提示符

843

Shell 教程

Shell 教程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。...

69

shell

shell语言是一种解释性语言,可以直接在命令行中运行。也可以将一些shell代码组织成.sh文件,从而实现脚本的复用。 Linux中常见的shell脚本有很多种,常见的有: Bourne Shell (/usr/bin/sh) Bourne Again Shell (/usr/bin/bash) Z Shell (zsh) csh、ksh… sh文件开头需要指明运行该脚本的解释器,例如若以bash解释器运行,则需要写: #! /bin/bash 虽然是一个注释,但操作系统会识别第一行的注释。

Shao_yihao的博客 886

Linux中的shell基础

      Linux只是通常指的是字符界面+内核,其字符界面或远程shell软件界面既是Linux的shell,内核只识别1和0,shell的作用就是将我们输入的命令转换为内核看得懂的机器码,为了操作方便shell一般自带一些强大的功能,掌握其中的常用功能是Linux开发所必需的。一、远程shell软件(也可以不要,直接在Linux字符界面操作):①.下载一个shell软件如Xshell 4,安...

Airuio的博客 348

Shell编程(一) : 基本介绍(shell脚本开发)

1. shell 教程 - 基本介绍 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Ken Thom...

开心的哈士奇 288

shell script (1)

一、前置定义 Shell ,Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。 Shell 脚本(shell script),是一种为 shell 编写的脚本程序。 用户通过Shell运行编写的Shell 脚本,达到使用 Linux 目的。 Shell种类很多,大多默认使用Bourne Again Shell(/bin/bash) 二、如何编写Shell 脚本 #!/bin/bash echo "Hello World !" 上面是一个简单的脚本。#!/bin/bash表示

xiao_mangguo的博客 181

1.Shell简介

1.默认的shell是每个用户账号的一个参数。Linux中典型的默认shell是/bin/bash 2.shell脚本通常是一个以shebang起始的文本文件 ------->#!/bin/bash (Unix的行话中,sharp或hash或mesh称呼字符 “#”;bang来称呼惊叹号 “!”。) 3.脚本需要可执行权限(x),才能被运行 4.运行脚本可使用绝对路径(/home/path/...

qq_43257377的博客 181

linux常用命令之bash入门指南

1 什么是Bash 什么是Shell   Bash 是 GNU Bourne-Again SHell,是目前大多数Linux发行版采用的Shell。   Shell 是 *nix提供给用户使用的界面。   一个操作系统的底层是独立运行的,用户界面和底层分开,可以最大限度的保证系统稳定。Shell就是一个特殊的程序,负责接受用户的命令,并把系...

weixin_33755554的博客 107

Linux脚本

Linux脚本 Shell介绍 Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有: bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。 sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。 Shell脚本示例: #!/bin/bash echo "Hello, world!" 注:上

It_BeeCoder的博客 854

An Introduction to Bash Shell Programming in Linux

This is not my original Post, Just copied it from the net for the reference Purpose: source &amp; Copyright :http://www.arachnoid.com/linux/shell_programming.html What is Bash?Okay, I grant that this...

weixin_33875839的博客 280
上一篇: 分布式基础(8)-常见分布式ID生成方案
下一篇: Linux Bash Shell 快速上手 - 下篇
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值