shell基础语法总结
admin
2024-04-03 09:21:32
0

文中各个命令可以拿来直接进行测试,可直接在在线测试shell命令进行测试。

1. 变量

一般用法

a=1
echo "a="${a} #使用变量时用${}
echo "a="$a #$a在遇到$ab时,会出错,因此第一种较好

除了显式地直接赋值,还可以用语句给变量赋值

ls
b=`ls /box` #直接将命令执行结果赋值给变量
echo "b="${b}
b=$(ls /box) #直接将命令执行结果赋值给变量
echo "b="${b}

定义只读变量

b readonly
b=2 #为只读变量重新赋值,报错

删除变量

unset a
echo "a="${a}

2. 数组

定义数组

array=(1 2 3 4 5) # 数组用括号包围起来
echo "array[2]="${array[2]} 

打印数组

echo "数组所有元素为:"${array[*]}

打印数组长度

echo "数组长度为:"${#array[*]}

设置数组元素值

array[0]=99
echo "数组第一个元素为:"${array[0]}

3. 字符串

字符串定义

str=1 #不加引号,类型为字符串类型
echo "str="${str}
str="1" 
echo "str="${str}#加双引号,类型为字符串类型
str='1'
echo "str="${str}#加单引号,类型为字符串类型。单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;不能嵌套

字符串长度

str1="abcdefg"
echo "str的长度为:"${#str1}
echo "str的第2个字符开始,连续3个字符为:"${str1:1:3}

4. 运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

c=`expr 2 + 2` #注意数字之间的空格
echo "2+2="${c}
c=`expr 2 - 2`
echo "2-2="${c}
c=`expr 2 \* 2` # 乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
echo "2*2="${c}
c=`expr 2 / 2`
echo "2/2="${c}
c=`expr 2 % 2`
echo "2%2="${c}
c=`expr 2 == 2`
echo "2==2?"${c}
c=`expr 2 != 2`
echo "2!=2?"${c}

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

$a -eq $b #判断等于
$a -ne $b #判断不等
$a -lt $b #判断小于
$a -gt $b #判断大于
$a -eq $b #判断等于
$a -le $b #判断小于等于
$a -ge $b #判断大于等于

布尔运算符

if [ !false ] #无空格
then
echo "true"
else
echo "false"
fi

b1=1
b2=3
if [ ${b1} -gt 0 -o ${b2} -gt 0 ] # -o表示 或
then echo "b1>0或b2>0"
elseecho "false"
fi

if [ ${b1} -gt 0 -a ${b2} -gt 0 ]
then echo "b1>0且b2>0"
elseecho "false"
fi

&&

if [[ ${b1} -gt 0 && ${b2} -gt 0 ]] #注意空格
thenecho "b1>0 && b2>0"
elseecho "false"
fi

||

if [[ ${b1} -gt 0 || ${b2} -gt 0 ]] #注意空格
thenecho "b1>0 || b2>0"
elseecho "false"
fi

字符串判断

#判等
if [ ${b1} = ${b2} ] # 注意这里是一个=
then echo "b1==b2"
elseecho "false"
fi#判断不等
if [ $[b1] != ${b2} ]
thenecho "b1 != b2"
elseecho "false"
fi

检测字符串是否不为空,

if [ ${b1} ]
thenecho "b1不为空"
elseecho"b1为空"
fi

文件测试运算符

#判断是目录
file=./run
if [ -d ${file} ]
then echo "false"
elseecho "不是目录"
fi#判断是文件
file=./run
if [ -f ${file} ]
thenecho "是文件"
elseecho "false"
fi

判断文件是否存在

if [ -e ${file} ]
thenecho "文件存在"
elseecho "false"
fi

5. 函数

function test(){a=$1b=$2echo "第一个参数为:"${a}echo "第二个参数为:"${b}c=`expr ${a} + ${b}`return ${c}
}
test 1 2 # 测试函数
echo "调用函数的结果为:" $? #注意:调用时用$?

6. 打印

echo "fdafd"
echo "我的名字叫\"张三\"" # \"显示转义字符
echo `ls` #显示命令执行结果
echo "123" > test # 将123写入文件test中,不追加
echo "456" >> test # 将456写入文件test中,追加
echo `cat test`
ls

7. 选择

一般的if

a=24
if [ `expr a == 2` ]
thenecho "a==2"
elseecho "false"
fi

if嵌套

if [ ${a} -gt 0 ]  #这里只做测试,忽略逻辑
thenecho "${a}>0"if [ ${a} -gt 6 ]thenecho "${a} > 6"elseecho "${a} <= 6"fi
elif [ ${a} -gt 5 ]
then   echo "${a}>5"
elif [ ${a} -gt 10 ]
then   echo "${a}>10"
elseecho "false2"
fi

8. 循环

arr=(1 2 3 4 5)
for i in ${arr[*]} # 注意这里的写法是arr[*]
doecho "当前元素为:"${i}     
doneint=1
while(( $int<=5 ))
doecho $intlet "int++" #Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量
done

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...