当前位置: 首页 > ds >正文

linux - shell脚本编程

一:第一个shell脚本程序

介绍

shell脚本程序,使用shell语言编写的程序(shell过程,shell脚本,脚本)由shell脚本解释.

容易编写,修改和调试,无需编译,由shell解释执行,是一个文本文件,一次执行一条命令

当命令执行完or出错,shell停止执行(.sh结尾)

shell的注释:#

比如:
hello.sh:

脚本的执行:

-1:我们可以使用sh hello.sh  or   bash hello.sh   or fish hello.sh来执行(启用新shell进程)

-2: . hello.sh    or  source hello.sh(在当前的shell进程解释执行)

-3:chmod u+x hello.sh  使用./hello.sh执行(将脚本转换为可执行文件)

(之所以加入./:不叫回去指定PATH的路径找,加了就说明在当前的路径)

比如:exit.sh:

exit

使用source exit.sh就是退出当前进程

如果是sh exit.sh 就没有用

二:脚本程序变量

变量:

计算机语言中存储和表示值的抽象概念,我们需要去关注他的命名,类型,存储空间,生存周期等等

变量的定义:

变量=变量值 (不要有空格) 而且不支持数据类型,默认转换为字符串

name= “前name 后name”

age =19

可以复制一个命令的结果

eg:DATE=`date`

变量的生命周期:

知道进程结束or unset 变量

使用变量:

需要$

比如:

a=1

b=a

echo $b #会显示 a

b=$a

echo $b #会显示 1

三:字符串拼接

直接放在一起就好了

first_sentence = “i am ”

name = my_name

second_sentence =”,nice to meet you!”

sentence = ${first_sentence}-${name}-${day}  #这里的{}只是为了让逻辑清晰,可以不要

echo sentence

#显示i am my_name,nice to meet you!

四:算数运算

内部没有支持算数运算的东西:
a=1

b=2

c=$a+$b

echo c #1+2

-1:expr:

算术运算符:+ ,- ,\*, /, \%

eg:(注意,符号两边要有空格

expr 1 + 2 #3

expr -1 - 2 #-3

expr 4 / 3 #1

所以就可以:

x=10

x=`expr $x + 1`

echo $x #11

-2:也可以let

let x=x+1  //把表达式当做一个参数 ,所以这里面=,+的两边都没有空格

x=100

let x=x+100

let y=x*2

echo %y #400

-3:(())   

(()) #支持 a++,c-- ,a*=2    !!!!!

x=100

((x=x+100))

echo x #200

((x++,a=x))

echo $a #201 ,

五:脚本程序的参数输入

-1:命令行输入:

./xxx.sh 参数1 参数2 参数3

到时候再程序里面直接使用$1....就可以了

还有一些特殊的参数:

(注意:第10个及以后的参数需要用大括号括起来,eg: ${10})

eg:hello_pro.sh:

echo ”hello,$1”

./hello_pro.sh “world!”   #hello,world!

可以使用 set来将自己的参数按顺序赋值给位置参数

-2:交互式输入:


read a b c #等待用户输入3个变量

如果输入的变量多于3个,则>=3个之后的全部赋值给最后一个

如果输入的变量少于3个,则,有几个前面的就读几个

六:条件语句

字符串的判断:

下面的 [ 条件表达式 ] 可以是 test 条件表达式

数值的判断操作符:

文件检测:

逻辑表达式可以使用逻辑运算法来进行组合:


-a:与

-o:或

! :非

单分支:if - then -fi

注意:if then 不能放在同一行,如果需要,则用; 在 ] 和 then中间分隔

双分支:if - then - else -fi

多分支: if- then -elif -then ...... fi

七:分支语句

case:通过变量值匹配与定义的模式来执行对应的命令块

(注意是;;截止一个选项,同时其他的选项表示为 *)

八:循环语句

1-:for(成立则执行)

variable 从头到尾取list的值,每个值执行一次

这里的取值列表可以是:
----1:列出所有的成员

for filename

in file1 file2 file3

do

xxx

done

----2:等差数列 (start,end,步长)  / seq start 步长 end

for i in {1..100} #默认为1

do

xxx

done

----3:命令的结果

for filename

in `cat names`

do

xxx

done

2-:while(成立则执行)

while [ condition ]

do

xxxxx

done

3-:until (不成立则执行)

until [ condition ]

do

xxx

done

可以使用continue /break

九:程序执行状态返回

shell的内部命令,用于立即终止程序

exit [n]

n是退出的状态:
0 :退出成功

else:退出失败,不同的值对应不同的错误类型

\

http://www.xdnf.cn/news/4718.html

相关文章:

  • 解锁 AI 生产力:Google 四大免费工具全面解析20250507
  • vue3+ts的watch全解!
  • 登顶中国:基于 Trae AI与 EdgeOne MCP 的全国各省最高峰攀登攻略博客构建实践
  • 比较入站和出站防火墙规则
  • 使用Apache Spark在Java中进行日志分析
  • 如何快速获取旺店通奇门原始数据至本地
  • 掌握Multi-Agent实践(二):基于AgentScope构建支持@机制的群聊系统,实现定向对话机制
  • LeetCode 热题 100 322. 零钱兑换
  • CATIA高效工作指南——零件建模篇(二)
  • 多边形生成立面点云
  • Python理财应用-- A股指标对比 | AKShare【未完待续】
  • 【视觉基础模型-SAM系列-1】Segment Anything
  • std::atomic<bool>与bool的区别
  • AI Agent四大范式:解锁智能体的进化密码
  • 算法探索:合并区间问题深度解析
  • nRF Connect SDK system off模式介绍
  • FEKO许可使用效率分析
  • 微服务架构详解
  • 掌握Multi-Agent实践(一):使用AgentScope实践入门和Workstation上手指南
  • 快速上手知识图谱开源库pykeen教程指南(一)
  • element-plus中,vue3项目,el-input密码框禁止浏览器自动弹出浏览器历史密码提示框
  • 华清远见陶金华受邀武汉大学讲座: 共话“算力下沉”时代,赋能AloT技术新未来
  • 【大模型面试每日一题】Day 11:参数高效微调方法(如LoRA、Adapter)的核心思想是什么?相比全参数微调有何优缺点?
  • 【行业】一些名词
  • 双11美妆数据分析
  • 双指针思路
  • 使用频域变换轻松压缩kv-cache
  • pip安装包时出现网络问题的坑
  • Nvidia Orin 安装onnxruntime-gpu
  • 中科固源:蓝牙协议栈架构与核心协议深度剖析