Linux:sh脚本

ops/2024/10/24 19:43:43/

文章目录

  • 1 标头
  • 2 执行脚本文件
  • 3 数组
  • 4 传递参数
  • 5 运算符 && 分支语句
  • 6 循环语句
    • 6.1 for循环
    • 6.2 while循环
    • 6.3 until循环
    • 6.4 case语句 && read输入
    • 6.5 循环控制
  • 7 函数
  • 8 文件、文件夹、字符串判断 && 示例


1 标头

bash">#!/bin/sh

指明了脚本中命令的解释器

2 执行脚本文件

./*.sh(需要X执行权限chmod u+x *.sh)
source *.sh
sh *.sh(不需要X执行权限)

sh -x *.sh(查看sh执行过程)

bash">#echo语句输出字符串
echo HelloWorld#创建变量
x=666
y=777
#expr命令计算给定表达式并显示其相应的输出
expr $x "+" $y#遍历多个值
for info in Wang Long Li Zhang
doecho "welcome $info"
done

3 数组

bash">array=("Wang" "Zhao" "Xiao" "Min")
#输出数组中的单个元素
echo ${array[0]}
echo ${array[1]}
#输出数组中的所有元素
echo ${array[@]}
#输出数组大小
echo "array size: " "${#array[@]}"
#输出数组区间的元素
echo ${array[@]:1:3}

4 传递参数

bash">echo "Shell pass values during execution:"
echo "executor: $1"
echo "The first parameter: $2"
echo "The second parameter: $3"
echo "The third parameter: $4"

5 运算符 && 分支语句

bash">a=10
b=20
if [ $a == $b ]; then echo "a equals b"
elif [ $a -gt $b ]; then echo "a greater than b"
elif [ $a -lt $b ]; then echo "a less than b"
else echo "There is no match"
fi

! 非运算
-o 或运算
-a 与运算
&& 逻辑AND
|| 逻辑OR
-eq 相等判断
-ne 不相等判断
-gt 大于(>)判断
-lt 小于(<)判断
-ge 大于等于(>=)判断
-le 大于等于(<=)判断

= 字符串是否相等
!= 字符串是否不相等
-z 字符串长度是否为 0
-n 字符串长度是否不为 0
if [ $a ] 字符串判空

6 循环语句

6.1 for循环

bash">echo "for statement:"
for(( i=1;i<=10;i++ ));
doecho $(expr $i "*" $i "+" 1);
done

6.2 while循环

bash">echo "while statement:"
i=1
while(( $i<=5 ))
doecho $ilet "i++"
done

6.3 until循环

bash">echo "until statement:"
a=0
until [ ! $a -lt 10 ]
doecho $alet "a++"
done

6.4 case语句 && read输入

bash">echo 'Enter a number between 1 and 4, you entered:'
read Num
case $Num in1) echo 'you choose 1' ;;2) echo 'you choose 2' ;;3) echo 'you choose 3' ;;4) echo 'you choose 4' ;;*) echo 'you did not enter a number between 1 and 4' ;;
esac

6.5 循环控制

continue代表停止当前循环,进入下次循环。
break代表终止循环。

7 函数

bash">demoFun(){echo "This is my first Shell Function!"
}
echo "-----Function start-----"
demoFun
echo "-----Function end-----"

8 文件、文件夹、字符串判断 && 示例

bash">#!/bin/shpath="build"if [ -d $path ]; thenecho "clean old cache ($path) ..."rm -r $path
fifor file in ./*.sa525m.update; doif [ -f $file ]; thenfilename=${file##*/}echo "clean old output ($filename) ..."rm $filefibreak;
doneif [[ $1 = "clean" ]]; thenexit 0
fimkdir $path && cd $pathcmake ..makecd ..
file=$(find . -type f -name "*.sa525m.update")
if [ -n "$file" ]; thenfilename=${file##*/}echo "make success!"echo "output: $filename"
elseecho "make failed!"
fi
bash">#!/bin/shfolder=$(find . -type d -name "_build_*")
if [ -n "$folder" ]; thenfoldername=${folder##*/}echo "clean old cache ($foldername) ..."rm -r $folder
fifor file in ./*.sa525m.update; doif [ -f $file ]; thenfilename=${file##*/}echo "clean old output ($filename) ..."rm $filefibreak;
doneif [[ $1 = "clean" ]]; thenexit 0
fidefine=$(find . -type f -name "*.adef")
if [ -n "$define" ]; thendefinename=${define##*/}echo "mkapp $definename ..."mkapp -t sa525m $definename -C "-O2" -X "-O2"
elseecho "Not fond *.def to mkapp!"exit 1
fifile=$(find . -type f -name "*.sa525m.update")
if [ -n "$file" ]; thenfilename=${file##*/}echo -e "mkapp success!\r\noutput: $filename"
elseecho "mkapp failed"
fi

if [ -e filename ] ; then
-e :判断文件或目录是否存在
-d :判断是不是目录,并是否存在
-f :判断是否是普通文件,并存在
-r :判断文档是否有读权限
-w :判断是否有写权限
-x :判断是否可执行
-n:判断一个变量是否有值

#从头部开始匹配删除 删除第一个 / 前的所有内容
${variable#/}
#从头部开始匹配删除 删除最后一个 / 前的所有内容
${variable##
/}
#从尾部开始匹配删除 删除第一个 / 前的所有内容
${variable%/}
#从尾部开始匹配删除 删除最后一个 / 前的所有内容
${variable%%/
}


http://www.ppmy.cn/ops/128135.html

相关文章

构建后端为etcd的CoreDNS的容器集群(一)、生成自签名证书

笔者拟使用官方的etcd和CoreDNS容器镜像生成带自签名的分布式DNS容器集群。按计划需做生成自签名证书、部署etcd集群、配置CoreDNS以使用etcd作为后端共三步&#xff0c;本文为第一步。 一、生成自签名证书 1、准备CFSSL工具 官网下载&#xff1a; [rootlocalhost ~]# cd /o…

深入解析 JavaScript 构造函数:特性、用法与原型链

在 JavaScript 中&#xff0c;构造函数是实现面向对象编程的关键工具之一。它与 this 关键字、箭头函数的作用域链以及原型和原型链紧密相关。本文将全面深入地探讨 JavaScript 构造函数的各个方面。 一、构造函数的定义与用法 构造函数是一种特殊的函数&#xff0c;用于创建…

c++ pdf文件提取txt文本示例

最近抽空采用之前封装的接口将pdf文件提取出txt文本&#xff0c;顺利完成&#xff0c;界面如下所示&#xff1a; 提起的效果如下所示&#xff1a; 输出的txt文本内容如下&#xff1a; 下载链接&#xff1a;https://download.csdn.net/download/u011269801/89905548

线性可分支持向量机的原理推导 9-23拉格朗日乘子α的最大化问题 公式解析

本文是将文章《线性可分支持向量机的原理推导》中的公式单独拿出来做一个详细的解析&#xff0c;便于初学者更好的理解。 公式 9-23 是支持向量机&#xff08;SVM&#xff09;优化过程中从最大化问题到对偶问题的关键步骤之一。它将目标函数简化为关于拉格朗日乘子 α \alpha …

mac用户使用Windows的方法:虚拟机、远程桌面和迷你主机

&#x1f389; 前言 之前写了一篇博客&#xff0c;里面提到mac想要使用Windows系统可以使用远程桌面的方式连接服务器&#xff0c;今天不妨让我们把思路拓宽&#xff0c;看看还有哪些方法。 &#x1f389; 本质 我们通过远程桌面连接服务器&#xff0c;说到底不就是用本地电…

leetcode 3185. 构成整天的下标对数目 II 中等

给你一个整数数组 hours&#xff0c;表示以 小时 为单位的时间&#xff0c;返回一个整数&#xff0c;表示满足 i < j 且 hours[i] hours[j] 构成 整天 的下标对 i, j 的数目。 整天 定义为时间持续时间是 24 小时的 整数倍 。 例如&#xff0c;1 天是 24 小时&#xff0c…

Vue3 Echarts中国地图(包含轮播高亮区域)

vue3使用echarts去实现中国地图轮播高亮也是花了时间和精力的学习内容&#xff08;希望大家分享学习内容的时候 能够认真一点 不要贴一大堆代码上去 根本用不了 可以多写一些注释 谢谢。&#xff09; 我先直接贴代码 import { defineProps, ref, watch, onMounted, toRaw } fr…

在linux上部署ollama+open-webu,且局域网访问教程

在linux上部署ollamaopen-webu&#xff0c;且局域网访问教程 运行ollamaopen-webui安装open-webui &#xff08;待实现&#xff09;下一期将加入内网穿透&#xff0c;实现外网访问功能 本文主要介绍如何在Windows系统快速部署Ollama开源大语言模型运行工具&#xff0c;并使用Op…