01-shell基础入门

一、Shell是什么?

shell可以理解为连接用户和操作系统内核的接口,将用户命令编译成操作系统能够执行的指令传给内核。目前有多种shell实现

常用的Shell

一般在linux系统中,常见的shell有/bin/sh、/bin/bash等,它们代表我们的命令由哪种shell进行编译。一般默认/bin/bash

二、入门示例

hello.sh

#!/bin/bash 
echo 'hello world!'

第一行的注释指定了该脚本由/bin/bash shell进行编译,执行命令如下

chmod +x ./hello.sh
./hello.sh

如果要指定/bin/sh 执行该脚本,则:

sh ./hello.sh

三、Shell变量

变量分为用户变量系统变量,例如:$USER $PWD $HOME,显示当前shell中的所有变量用set命令

3.1 基本语法

定义变量:变量名=变量值,等号两侧不能有空格,变量名一般习惯用大写。
删除变量:unset 变量名 。
声明静态变量:readonly 变量名,静态变量不能unset。
使用变量:$变量名

3.2 将命令执行结果赋值给变量

#方式一
ls=`ls`
#方式二
ls=$(ls)

3.3 配置/引用环境变量

/etc/profile

export JAVA_HOME=/usr/jdk8 

执行source /etc/profile 让环境变量生效

readEnv.sh

JAVA_HOME=$JAVA_HOME

3.4 位置参数变量

$n :$0 代表命令本身、$1-$9 代表第1到9个参数,10以上参数用花括号,如 ${10}。
$* :命令行中所有参数,且把所有参数看成一个整体。
$@ :命令行中所有参数,且把每个参数区分对待。
$# :所有参数个数。

#!/bin/bash     
# 输出各个参数 
echo $0 $1 $2 
echo $* 
echo $@ 
echo 参数个数=$#
chmod +x positionPara.sh 
./positionPara.sh 10 20
10 20 
10 20 
参数个数=2

3.5 预定义变量

不需要提前定义,可以直接使用的变量

$$ :当前进程的 PID 进程号。
$! :后台运行的最后一个进程的 PID 进程号。
$? :最后一次执行的命令的返回状态,0为执行正确,非0执行失败。

四、程序控制语法

4.1 计算相关

在shell脚本中不能像其它语言一样那么方便的进行计算操作,比如 a=b+c,需要使用到特定的运算符才行
运算符:$(()) 或 $[]

SUM=$((1+2))
DIV=$[$A/$B]
C=$(($A\*$B))

4.2 条件控制

if

#!/bin/bash 
if [ 'test01' = 'test' ] 
thenecho '等于' 
fi  # 20是否大于10 
if [ 20 -gt 10 ] 
thenecho '大于' 
fi  # 是否存在文件/root/shell/a.txt 
if [ -e /root/shell/a.txt ] 
thenecho '存在' 
fi  if [ 'test02' = 'test02' ] && echo 'hello' || echo 'world' 
thenecho '条件满足,执行后面的语句' 
fi

case

case $1 in
"1")
echo 周一
;;
"2")
echo 周二
;;
*)
echo 其它
;;
esac

4.3 流程控制

for

for 变量名 in 值1 值2 值3...
do程序
done# 语法2
for ((初始值;循环控制条件;变量变化))
do程序
done
#!/bin/bash  # 使用$* 
for i in "$*" 
do     echo "the arg is $i" 
done 
echo "=================="  # 使用$@ 
for j in "$@" 
do     echo "the arg is $j" 
done
执行结果:
the arg is 1 2 3 
================== 
the arg is 1 
the arg is 2 
the arg is 3
#!/bin/bash 
SUM=0  
for ((i=1;i<=100;i++)) 
do     SUM=$[$SUM+$i] 
done echo $SUM

while

while ((流程判断表达式))
do...
done

五、函数

系统函数

basename /usr/test1  //test1 
dirname /usr/test1 // /usr

自定义函数

#!/bin/bashfunction getSum(){SUM=$[$n1+$n2]echo "sum=$SUM"
}   read -p "请输入第一个参数n1:" n1
read -p "请输入第二个参数n2:" n2# 调用 getSum 函数
getSum $n1 $n2

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

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

相关文章

ESP32 S3音频开发

1. 音频硬件框架 2. 音频软件框架

Golang教程六(单元测试,反射,网络编程,部署)

目录 一、单元测试 单元测试 子测试 TestMain 二、反射 类型判断 通过反射获取值 通过反射修改值 结构体反射 利用tag修改结构体的某些值 调用结构体方法 orm的一个小案例 对反射的一些建议 三、网络编程 socket编程 websocket编程 四、部署 打包命令 交叉编译…

[攻防世界]Reversing-x64Elf-100

1.查壳 无壳&#xff0c;ELF文件 2.用IDA64打开 找到关键部分 这里有坑&#xff0c;看清楚v3是长度为3数组&#xff0c;里面放三个字符串 3.脚本解密 v1"Dufhbmf" v2"pGimos" v3"ewUglpt" v4[v1,v2,v3] a1[0,0,0,0,0,0,0,0,0,0,0,0] for i …

人工智能研究生前置知识—科学计算库numpy

人工智能研究生前置知识—科学计算库numpy numpy是python中做科学计算的基础库&#xff0c;对数组进行操作 整个numpy的操作和使用比较简单因此可以通过案例的学习掌握基本的用法在之后的学习中不断的进行熟悉和补充 创建数组&#xff08;矩阵 &#xff09; 创建的ndarray数组…

使用cmake进行打包,包含可执行程序和动态依赖库

平常代码开发中&#xff0c;有时候需要将写的程序打包成压缩包放到目标设备上进行运行测试。用CMake管理工程&#xff0c;实现使用make -jnproc package指令可以将工程进行打包&#xff0c;可执行文件存储在bin文件夹中&#xff0c;依赖库存储在lib文件夹中。 示例 1.工程目录结…

谷歌翻译接口-国内使用在线翻译API

对于翻译要求比较高的同学都知道Google翻译比现有市面上的翻译软件优势在哪里。下面来浅浅介绍一下其优点&#xff1a; 1、支持超过100种不同语言之间的互译&#xff0c;覆盖了全球主要语言。 2、基于机器学习技术&#xff0c;可根据用户大量的翻译数据不断优化和提升翻译的准确…

算法打卡day41|动态规划篇09| Leetcode198.打家劫舍、213.打家劫舍II、337.打家劫舍 III

算法题 Leetcode 198.打家劫舍 题目链接:198.打家劫舍 大佬视频讲解&#xff1a;198.打家劫舍视频讲解 个人思路 偷还是不偷&#xff0c;这取决于前一个和前两个房是否被偷了&#xff0c;这种存在依赖关系的题目可以用动态规划解决。 解法 动态规划 动规五部曲&#xff1…

B端系统:控制台图表的十大常见类型,附精美案例

大家伙&#xff0c;我是大千UI工场&#xff0c;专注UI分享和项目接单&#xff0c;本期带来控制台图表的常见类型&#xff0c;欢迎大家关注、互动交流。 B端系统控制台的图表类型有很多种&#xff0c;常见的包括&#xff1a; 折线图&#xff1a;用于显示随时间变化的数据趋势&a…

Spring Boot 学习(3)——Spring Initializr 创建项目问题解决

产生问题的原因&#xff0c;各种的版本都较老&#xff0c;所以导致出现问题。目前暂未打到合适的教程&#xff0c;按老教程学起来先。 小白瞎学&#xff0c;大神勿喷&#xff01; 再次强调环境&#xff1a;maven 3.3.9、jdk 1.8、idea 2017、Spring 4.3.13、Spring Boot 1.5.…

【动态规划 区间dp 位运算】100259. 划分数组得到最小的值之和

本文涉及知识点 动态规划 区间dp 位运算 LeetCode100259. 划分数组得到最小的值之和 给你两个数组 nums 和 andValues&#xff0c;长度分别为 n 和 m。 数组的 值 等于该数组的 最后一个 元素。 你需要将 nums 划分为 m 个 不相交的连续 子数组&#xff0c;对于第 ith 个子数…

设计者模式之中介者模式(下)

3&#xff09;中介者与同事类的扩展 1.结构图 新增了具体同事类Label和具体中介者类SubConcreteMediator。 2.代码实现 //文本标签类&#xff1a;具体同事类 public class Label extends Component {public void update() {System.out.println("文本标签内容改变&#…

【蓝桥杯-牛客冲刺题单】

蓝桥杯-牛客冲刺题单 前言&#xff1a;牛牛的早八光速签到牛牛的身高A加B,A模B四舍五入小红的环形字符串牛牛的说谎机器传送阵优美的序列小d和超级泡泡堂qsgg and Subarray结语 前言&#xff1a; 蓝桥杯前一天除了看看模板和做过的题&#xff0c;也可以限时做一下中等偏下的题…

linux中screen命令及Tmux的使用

linux中screen命令及Tmux的使用.md Screen使用一、大概使用的过程示例 Tmux使用安装基本用法会话管理窗口管理 Screen使用 本文内容摘自原文https://blog.csdn.net/weixin_43570155/article/details/121845415 使用 screen 可以帮助你在后台运行程序并保持持久性。下面是一些…

鉴权设计(一)———— 登录验证

1、概述 网站系统出于安全性的考虑会对用户进行两个层面的校验&#xff1a;身份认证以及权限认证。这两个认证可以保证只有特定的用户才能访问特定的数据的需求。 本文先实现一个基于jwt拦截器redis注解实现的简单登录验证功能。 2、设计思路 jwt用于签发token。 拦截器用于拦…

南京观海微电子---二极管钳位电路

在选择电阻器和电容器时&#xff0c;您必须注意电容器的放电时间&#xff0c;因为它会保持波形的时间段。它必须比时间段的一半大得多&#xff0c;以便电容器放电缓慢。电解电容器不应用于钳位电路&#xff0c;因为它们的充电和放电速度很慢。放电时间&#xff08;&#xff09;…

容器镜像进阶

Dockerfile 编写注意事项&#xff1a; 选择合适的基础镜像&#xff0c;没必要追求镜像的绝对大小。 alpine镜像不推荐&#xff0c;尤其是编译型业务&#xff0c;因为alpine镜像内置的musl libc库与标准的glibc不一样。 如果就是想使用alpine镜像&#xff0c;推荐多阶段构建&am…

2023-2024年科技行业主要变化趋势梳理与总结

一、主要大额并购案例并购原因 &#xff08;一&#xff09;产品线补充与业务市场拓展&#xff08;如VMware、Activision Blizzard并购案&#xff09; &#xff08;二&#xff09;技术整合&#xff08;如Spunk并购案&#xff09;、 &#xff08;三&#xff09;优化运营以期溢…

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量…

C++ 红黑树模拟实现

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;C知识分享⏪   &#x1f69a;代码仓库:C高阶&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多C知识   &#x1f51d;&#x1f51d; 前言 前面我们实现了AVL树&#xff0c;发明AVL树…

AI大模型探索之路-实战篇:基于CVP架构-企业级知识库实战落地

目录 前言 一、概述 二、本地知识库需求分析 1. 知识库场景分析 2. 知识库应用特点 3. 知识库核心功能 三、本地知识库架构设计 1. RAG架构分析 2. 大模型方案选型 3. 应用技术架构选型 4. 向量数据库选型 5. 模型选型 三、本地知识库RAG评估 四、本地知识库代码落地 1. 文件…