Shell语法全解

Shell基础语法全解

  • 一、shell简介
  • 二、shell格式
    • 2.1 新建一个shell脚本文件
    • 2.2 执行脚本方式
  • 三、变量
    • 3.1系统变量
    • 3.2自定义变量
    • 3.3 特殊变量
      • 3.3.1 `$n` 传入变量
      • 3.3.2 `$#` 输入参数个数
      • 3.3.3 `$*`、`$@` 输入参数内容
      • 3.3.4 `$?` 上一条命令执行结果
  • 四、运算符 `$[]`、`$(())`
  • 五、条件判断
    • 5.1判断数值大小
    • 5.2 判断文件权限、文件类型
  • 六. 流程判断
    • 6.1 if 判断
    • 6.2 case 判断
    • 6.3 for 循环
    • 6.4 until 循环
    • 6.5 while 循环

一、shell简介

shell是命令解释程序,它有很多种,例如:sh、bash、ash、dash等。

不同系统可能会使用不同的shell

#查看当前系统使用的shell是哪种
echo $SHELL
#输出,当前系统默认使用bash
/bin/bash

二、shell格式

2.1 新建一个shell脚本文件

#创建hello.sh文件
touch hello.sh
#修改权限
chmod +x hello.sh#编辑脚本文件
vim hello.sh

向hello.sh添加以下代码

#第一行开始的格式
#!/bin/bashecho "hello"

2.2 执行脚本方式

#1.查看当前系统有哪些shell
ll /bin/ | grep sh
#输出
-rwxr-xr-x  1 root root 1037528 7月  13  2019 bash*
-rwxr-xr-x  1 root root  253816 8月  14  2019 btrfs-show-super*
-rwxr-xr-x  1 root root  154072 2月  18  2016 dash*
lrwxrwxrwx  1 root root       4 5月  17 20:28 rbash -> bash*
lrwxrwxrwx  1 root root       4 5月  17 20:28 sh -> dash*
lrwxrwxrwx  1 root root       4 5月  17 20:28 sh.distrib -> dash*
lrwxrwxrwx  1 root root       7 3月   7  2019 static-sh -> busybox*
#以上可以看到有bash 和sh 两种#2.使用不同shell执行
#使用默认shell执行
./hello.sh#指定使用 bash 执行
bash hello.sh#指定使用 sh 执行
sh hello.sh#以上两种都输出
hello

三、变量

3.1系统变量

常用系统变量

#当前主目录
echo $HOME
#当前用户
echo $USER
#默认工作目录
echo $PWD
#默认shell
echo $SHELL
#默认语言
echo $LANGUAGEecho [$+变量名]
#等价于
printenv 变量名

3.2自定义变量

#定义变量  等号前面不能有空格
#变量名=变量值   
MyName="lisi"#撤销变量
unset MyName

撤销案例

a=2
echo $a
#输出
2
#撤销变量
unset a
echo $a
#输出空行

3.3 特殊变量

3.3.1 $n 传入变量

  $n 中的n是指代数字,表示第n个传入变量 第0个变量是脚本名称,其中$1-$9是第1个到第9个变量,十以上需要用大括号包括 ${10}

3.3.2 $# 输入参数个数

  $# 是输入参数个数,可以在shell脚本中通过该变量获取。

3.3.3 $*$@ 输入参数内容

  这俩个都是获取所有输入参数,但是$@可以被遍历

#编辑hello.sh#!/bin/bash
echo '=======$n========='
echo '$0 arg0 is:'  $0
echo '$1 arg1 is:'  $1
echo '$2 arg2 is:'  $2
echo '$3 arg3 is:'  $3
echo '$4 arg4 is:'  $4
echo '=======$#========='
echo 'args total is:' $#
echo '=======$*========='
echo 'args str is:' $*
echo '=======$@========='
echo 'args str enumable is' $@#执行命令
./hello.sh arg1 arg2 arg3 arg4 arg5
#输出
=======$n=========
$0 arg0 is: ./hello.sh
$1 arg1 is: arg1
$2 arg2 is: arg2
$3 arg3 is: arg3
$4 arg4 is: arg4
=======$#=========
args total is: 5
=======$*=========
args str is: arg1 arg2 arg3 arg4 arg5
=======$@=========
args str enumable is arg1 arg2 arg3 arg4 arg5

3.3.4 $? 上一条命令执行结果

echo $[1/0]
#输出
-bash: 1/0: 除0 (错误符号是 "0")echo $?
#输出 1为上一条命令执行有错误,0表示没有错误
1./hello.sh
#没有报错的话,输出0
0

四、运算符 $[]$(())

  $[]$(()) 用于数值计算,避免歧义,所以括起来进行计算。

#!/bin/bash
s1=$[(1+3)*5]
s2=$((5+3))
echo '(1+3)*5 =' $s1
echo '5+3 =' $s2
sum=$[$1+$2]
echo '$1+$2=' $sum#执行
./com.sh 12 13
#输出
(1+3)*5 = 20
5+3 = 8
$1+$2= 25

五、条件判断

5.1判断数值大小

判断符号含义
-eq等于
-ne不等于
-lt小于
-le小于等于
-gt大于
-ge大于等于

基础案例

test 4 -gt 3
echo $?
#输出  0表示true,1表示false
0test 4 -lt 3
echo $?
#输出  0表示true,1表示false
1#等价于上面,但是注意括号前后需要有空格
[ 4 -gt 3 ]
echo $?
#输出  0表示true,1表示false
0

5.2 判断文件权限、文件类型

判断文件权限

判断权限符号文件权限
-r有读的权限
-w有写的权限
-x有执行的权限

判断文件类型

判断类型符号文件类型
-e文件存在
-f文件存在且是一个常规文件
-d文件存在且是一个目录

多条件判断

使用 && 进行短路与操作,如果第一个条件为false,直接返回false。

使用 || 进行短路或操作,如果第一个条件为true,直接返回true。

#判断shell脚本是否为文件夹
[ -d com.sh ]
echo $?
#输出1   false
1#可以利用多条件判断,构成一个类似 ?: 的三元运算
[ -f com.sh ] && echo true || echo false
#输出
true

六. 流程判断

6.1 if 判断

使用格式

#格式一
if [ 条件判断式 ]
then语句
fi
或者
if [ 条件判断式 ];then语句
fi#格式二
if [ 条件判断式 ]
then语句
elif [ 条件判断式 ]
then语句
else语句
fi

基础案例

#编辑if.sh#!/bin/bash
if [ 4 -gt 3 ];thenecho true
elseecho false
fi./if.sh
#输出
true

if判断案例

#!/bin/bash
if [ $# -gt 1 ]
thenif [ $1 -gt $2 ]thenecho $1 is biggerelif [ $1 -lt $2 ]thenecho $2 is biggerelseecho $2 equal $1fi
elseecho args too less
fi./if.sh 1 3
#输出
3 is bigger./if.sh
#输出
args too less

6.2 case 判断

使用格式

case $1 in
条件1)语句;;
条件2)语句;;
*)其他情况;;
esac

基础案例

#编辑文件 case.sh#!/bin/bash
if [ $# -le 0 ]
thenecho args is lessexit 1
fiecho arg num is $#,arg1 is $1case $1 in
1)echo arg is 1;;
2)echo arg is 2;;
*)echo arg is $1;;
esac./case.sh 8
#输出
arg num is 1,arg1 is 8
arg is 8./case.sh 3
#输出
arg num is 1,arg1 is 3
arg is 3

6.3 for 循环

使用格式

#格式一
for i in $@
doecho $i
done#格式二
for ((i=1;i<=5;i++))
doecho $i
done

基本案例

#编辑for.sh文件
#!/bin/bash
echo arg num is $#.
for i in $@
doecho $i
done./for.sh 1 2 3 4 5 6
#输出
arg num is 6.
1
2
3
4
5
6

6.4 until 循环

使用格式

until 条件
do语句
done

基本案例

#编辑 until.sh#!/bin/bash
i=1
sum=0
#until中条件为true就退出
#直到i大于10就退出,意思是这里i为11就退出
until [ $i -gt 10 ]
dosum=$[$i+$sum]let i++
done
echo $sum./until.sh
#输出
55

6.5 while 循环

使用格式

while 条件
do语句
done

基本案例

#!/bin/bash
i=1
sum=0
#while中条件为false就退出
#当i小于等于10就执行循环语句,意思是这里i为11就退出
while [ $i -le 10 ]
dosum=$[$i+$sum]let i++
done
echo $sum

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

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

相关文章

Monica

在 《long long ago》中&#xff0c;我论述了on是一个刚出生的孩子的脐带连接在其肚子g上的形象&#xff0c;脐带就是long的字母l和字母n&#xff0c;l表脐带很长&#xff0c;n表脐带曲转冗余和连接之性&#xff0c;on表一&#xff0c;是孩子刚诞生的意思&#xff0c;o是身体&a…

24年下半年各省自考报名时间汇总

24年下半年各省自考报名时间汇总

shell学习笔记

一、Shell概述 Shell是一个命令行解释器&#xff0c;它接收应用程序/用户命令&#xff0c;然后调用操作系统内核 Shell还是一个功能强大的编程语言&#xff0c;易编写、易调试&#xff0c;灵活性强。 Shell程序文件对后置名无要求&#xff0c;一般使用.sh作为后缀 程序书写以#…

【JAVA时间】探索时钟的奥秘

JAVA时间格式&#xff0c;没有那么死板&#xff0c;可以自由组合。你想怎样就怎样&#xff0c;随便你控制。 import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter;public class DateFormatEx…

2024年【N1叉车司机】考试及N1叉车司机考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N1叉车司机考试是安全生产模拟考试一点通总题库中生成的一套N1叉车司机考试题库&#xff0c;安全生产模拟考试一点通上N1叉车司机作业手机同步练习。2024年【N1叉车司机】考试及N1叉车司机考试题库 1、【多选题】《中…

独角兽品牌獭崎酱酒:高性价比的酱香之选

在酱香型白酒领域中&#xff0c;獭崎酱酒以其独特的品牌定位和高性价比迅速崛起&#xff0c;成为市场上备受关注的独角兽品牌。作为贵州茅台镇的一款新秀酱香酒&#xff0c;獭崎酱酒不仅传承了百年酿造工艺&#xff0c;还以创新的商业模式和亲民的价格赢得了广大消费者的青睐。…

BLDC无感控制策略

本文根据 BLDC 的电路模型推导了一个简 化磁链方程来估计转子位置,转速适用范围较 广;重点分析了反电动势和换相电流对转矩脉动 的影响;设计了一种BLDC的无速度传感器高速 驱动控制方案。通过试验验证了新型控制策略 的性能。 1 低速时的转子位置检测 图1 为高速无刷直流电…

数学建模基础:线性模型

目录 前言 一、线性方程组 二、线性规划 三、线性回归 四、线性模型的应用 五、实例示范&#xff1a;医疗成本预测 步骤 1&#xff1a;导入数据 步骤 2&#xff1a;数据预处理 步骤 3&#xff1a;建立多元线性回归模型 步骤 4&#xff1a;模型验证 步骤 5&#xff1…

重生奇迹MU 浅析智力妹妹的现状与天赋

早期的重生奇迹MU游戏中&#xff0c;智力系女性角色通常被简称为“奶娘”&#xff0c;因为她们天生就是辅助定位&#xff0c;能够为队友提供很多帮助。那个时代的游戏非常艰难&#xff0c;升级困难&#xff0c;装备和宝石很难获得&#xff0c;使用药品的消耗也非常大。因此&…

Python中的性能分析和优化

在前几篇文章中&#xff0c;我们探讨了Python中的异步编程和并发编程&#xff0c;以及如何结合使用这些技术来提升程序性能。今天&#xff0c;我们将深入探讨如何分析以及优化Python代码的性能&#xff0c;确保应用程序的高效运行&#xff01; 性能分析的基本工具和方法 在进…

AGV机器人的调度开发分析(2)- 内核中的调度

我们开发AGV的调度系统&#xff0c;最重要的是要实现调度的运行&#xff0c;那么调度要执行哪些任务呢&#xff1f; 先来看看德国开发的开源openTCS中的功能定义&#xff1a; openTCS的控制核心是kernel&#xff0c;目的是提供运输系统/工厂的抽象驾驶模型&#xff0c;管理运…

SVG 模糊效果

SVG 模糊效果 SVG&#xff08;Scalable Vector Graphics&#xff0c;可缩放矢量图形&#xff09;是一种基于XML的图像格式&#xff0c;用于描述二维图形。它是一种矢量图形格式&#xff0c;因此可以无限放大而不失真。SVG广泛应用于网页设计、动画制作和图形编辑等领域。本文将…

screenshot-to-code之安装、测试

准备 GPT收费账号 screenshot-to-code Supported AI models: GPT-4O - Best model!GPT-4 Turbo (Apr 2024)GPT-4 Vision (Nov 2023)Claude 3 SonnetDALL-E 3 for image generation git或者手动 下载源代码 https://github.com/abi/screenshot-to-code pip install poetry (…

Gradle代理设置

修改 ~/.gradle/gradle.properties 文件&#xff0c;添加代理配置。 对于http和https代理&#xff0c;添加如下内容&#xff1a; systemProp.http.proxyHost<host> systemProp.http.proxyPort<port> # systemProp.http.proxyUser<user> # systemProp.http.…

AI 大模型企业应用实战(10)-LLMs和Chat Models

1 模型 来看两种不同类型的模型--LLM 和聊天模型。然后&#xff0c;它将介绍如何使用提示模板来格式化这些模型的输入&#xff0c;以及如何使用输出解析器来处理输出。 LangChain 中的语言模型有两种类型&#xff1a; 1.1 Chat Models 聊天模型通常由 LLM 支持&#xff0c;…

正确实现 QThread 的方法(附示例)

这篇技术博客探讨了在 Qt 框架中正确实现 QThread 类的方法。传统 Qt 文档建议继承 QThread 类并重写其 run 方法,这虽然在某些情况下可行,但并不是推荐的最佳实践。以下内容将探讨这种方法的利弊,并提供一个更好的实现 QThread 的示例。 原始示例:继承 QThread 并重写 ru…

FFmpeg源码:ff_ctz / ff_ctz_c函数分析

一、ff_ctz函数的作用 ff_ctz定义在FFmpeg源码目录的libavutil/intmath.h 下&#xff1a; #ifndef ff_ctz #define ff_ctz ff_ctz_c /*** Trailing zero bit count.** param v input value. If v is 0, the result is undefined.* return the number of trailing 0-bits*/…

从零开始搭建一个酷炫的个人博客

效果图 一、搭建网站 git和hexo准备 注册GitHub本地安装Git绑定GitHub并提交文件安装npm和hexo&#xff0c;并绑定github上的仓库注意&#xff1a;上述教程都是Windows系统&#xff0c;Mac系统会更简单&#xff01; 域名准备 购买域名&#xff0c;买的是腾讯云域名&#xf…

OpenCV 棋盘格角点探测

文章目录 一、简介二、代码实现三、实现效果参考文献一、简介 这篇文章中(https://mp.weixin.qq.com/s?__biz=Mzg5MzE2NzgwOA==&mid=2247483686)探讨了关于OpenCV中棋盘格角点探测算法的整个过程,以及所存在的缺点限制。总的来说,(1)在opencv中为了兼顾计算速度,因…

@PostConstruct 注解的方法用于资源的初始化

PostConstruct 是 Java EE 5 引入的一个注解&#xff0c;主要用于依赖注入完成之后&#xff0c;需要执行的方法上。这个注解的方法会在依赖注入完成后自动被容器&#xff08;如 EJB 容器或 Spring 容器&#xff09;调用&#xff0c;并且只会被调用一次。 PostConstruct 注解的…