shell学习

基础

适用情况

  1. 自动化
  2. 开机即用
  3. 开发快
  4. 固化下可以节省重复操作
  5. 构建个人高效工作环境
    不适用情况
  6. 需要具体操作
  7. 需要效率
  8. 需要保护源码
    不使用C等语言的思路编写Shell,尽可能发挥整合其他工具效能,而非考虑用shell自身实现

执行

#!/bin/bash -x 开启调试模式
set -x 开启调试
set +x 关闭调试
在执行前后加入后ctrl+z切换到前台,然后再执行就有日志了
fg切回后台

常用Linux命令

find
find [path] [expression]
参数
-name 按文件名查找,支持和?
-iname 忽略大小写
-type 文件类型[f 普通文件;d 目录;l 符号链接]
-size 文件大小
-maxdepth,mindepth 递归深度
-username 用户所属
实例
find . -iname "
.sh" 当前目录中地柜查找以.sh结尾的文件或目录
find . -maxdepth 2 -mindepth 2 -name “a” 在特定目录层级下查找
find . -name=“asdf” -exec ls -l {} ; 找到后针对文件执行命令,文件名带空格时更安全
find . ‘(’ -iname “a” -o -ipath “var” ‘)’ -a ! -size +5M 条件组合。
()组合表达式
-o 表示或
-ipath 路径包含“var”的文件
-a 与
! -size +5M 排除文件大小超过5M的文件
find . -iregex ‘.*’ 正则表达式
grep
参数
-r 递归查找
-n 显示行号
-i 忽略大小写
-v 反向查找
-E 正则查找
grep -ir ‘^x.*aaa’ .当前目录下递归查找,忽略大小写
grep ‘<c…h>’ /usr/share/dict/words 查找以c开头h结尾的五个单词
grep --‘-r’ 查找-r。转义
grep -E ‘(H|h)ello’ # 查找 ‘hello’ 或 ‘Hello’
-A10 -B10 -C10 # 显示下10行、上10行、上下10行
awk
awk ‘{print $3}’
awk -f awk_script_file input_files
sed
sed “s/3/three/g” filex
sed “/^1/s/3/three/g” filex
sed “/^1/s/3/three/gp” filex
sed -n “/^1/s/3/three/gp” filex
Shell

变量

#变量定义
FILENAME="ABC" # 等号左右不可加空格
#变量使用
echo $FILENAME
echo ${FILENAME} #花括号可选
echo "I have a txt file named ${FILENAME}.txt #但最好写上因为可以帮助编译器识别变量区间
readonly NAME #只读变量
local FILE #局部变量
unset FILE #删除变量

字符串

str='string'
str1="string"

字符串分为单引号和双引号
单引号

  • 强引用,任何字符都是原样输出
  • 不可转义
  • 单引号内不能有单独的单引号(包括转义符),但可以成对出现用于字符串拼接
    双引号
    弱引用,可以加入转义和变量
NAME="bob"
echo "hello "$NAME"" # hello bob
echo "hello $NAME" #hello bob
echo 'hello '$NAME'' #hello bob
echo 'hello $NAME' #hello $NAME
#-------------------------------------
echo ${#NAME} #输出长度
echo ${NAME:1:4} #输出第2个到第4个字符
POS=1
LEN=3
echo ${NAME:$POS:$LEN} 输出1-3
echo ${NAME[@]} #输出字符串
string="He is a boy"
echo `expr index "$string" io` #查找字符i和o的位置(先出现哪个就计算哪个)

字符串替换

STRING="to be or not to be"
echo ${STRING[@]/be/eat} #to eat or not to be 替换第一个匹配项
echo ${STRING[@]//be/eat} #to eat or not to eat 替换所有出现的子字符串
echo ${STRING[@]// not/} #删除not
echo ${STRING[@]/#to be/eat now} #替换子字符串如果to be在开头的话
echo ${STRING[@]/%to be /eat now} #替换子字符串如果在末尾的话
echo ${STRING[@]/#to be/to be on $(date +%Y-%m-%d)} #使用shell命令输出替换

数组

array_name=(value0 value1 value2) #定义
declare -A site={["google"]="www.google.com"} #设置一个关联数组
a=${array_name[n]} #取数
echo ${array_name[@]} #取全部的数
length=${#array_name[@]} #取数组元素的个数
lengthnn=${#array_name[n]} #取单个元素的长度

基本计算

A=3
B=$((100*$A+5))
$0,$1 接收参数
$# 参数个数
$$ 脚本PID
$! 后台运行的最后一个进程的ID号
$? 运行状态
$* 以单字符串显示所有向脚本传递的参数
$@ 与上面的相同,不过使用时加引号,在引号中返回每个参数

if和关系运算符

-eq 相等
-ne 不相等
-gt 左边是否大于右边
-lt 左边是否小于右边
-ge 左边是否大于等于右边
-le 左边是否小于等于右边

布尔运算符

! 非
-o 或
-a 与
-z 判断字符串长度是否=0 if[ -z $a]
-n 长度是否不为0 if [-n "$a"]
$ 是否不为空

test运算符

if test $[num1] -eq $[num2] then #判断式
result=$[a+b] 计算a和b的值

逻辑判断

if test $[num1] -eq $[num2]
then
echo "equal"
else
echo "not equal"
fi
for val in item1 item2 ... itemN
do
something
done
while (($int<=5))
do
command
done
无限循环:
while :
do
done
while true
do
done

函数
不带任何参数

demoFun(){
echo "shell function!"
}
demoFun()

如果没有return,那么就会返回最后一条命令的返回值。return的取值范围为0-255

返回值通过$?获得
函数参数通过$n获得
funWithParam(){
echo "First param $1"
echo "second param $2"
echo "10th param ${10}"
echo "参数总共有 $# 个"
echo "输出所有参数: $*"
}

重定向

command > file 输出重定向到file
command < file 输入重定向到file
command >> file 追加重定向到file
n > file 文件描述符为n的文件重定向到file
n >> file 追加重定向
n >& m 输出文件m和n合并
n <& m 输入文件m和n合并
<< tag 将开始标记tag和结束标记tag之间的内容作为输入
# 0 stdin 1 stdout 2 stderr
# 2> 标准错误重定向
# & : 放到后台执行

实例


stdout和stderr合并后重定向到file
2>&1表示标准错误重定向到了和标准输出一样的地方
command > file 2>&1
command &> log.txt
command将stdin重定向到file1,stdout重定向到file2
command < file1 > file2
wc -l < readme.md # 统计readme.md行数
while read str; do
echo $str
done < readme.txt #代码块重定向,将readme.txt的内容放到标准输入之中
wc -l <<END 查看用户输入的行数,一直到遇到END之后才结束读取

shell的一些注意事项和实例

通配符
*

  • -匹配0或多个任意字符 ?
  • -匹配任意单个字符 []
  • -匹配[]范围内任意单个字符
var="aa_bb_cc_dd"
echo "${var#*_}" # #表示删除匹配到的部分,*_表示通配符匹配。这里采用的是最短匹配
法.out:bb_cc_dd
echo "${var##*_}" # 最长匹配法 out:dd
echo "${var%_*}" #aa_bb_cc 删除最后一个_*及其右边的串
echo "${}var%%_*}" #删掉第一个及其右边的床 out:aa

** ? 的影响 ∗ ∗ 第一个语句, e c h o 中的 ?的影响** 第一个语句,echo中的 ?的影响第一个语句,echo中的?实际上是local a这个命令的返回值。
因此应按照第二个的方法写
对比[] [[]] (()) ()
[] 兼容性最好,是一个可执行程序
*
[[]] 比 [] 功能更多,更方便,更安全,但非Posix标准
*
(()) C风格的数值计算,例如((i++)) ((a + b * c))
*
() 用于创建执行子Bash进行
IFS
内部域分隔符

Shell环境变量分为两种,set为当前shell的内部域环境变量,env为全局环境变量。IFS作为一种set
变量,可以再命令替换和参数替换时根据IFS值来拆解读入的变量。
判断变量作用域:
env | grep IFS # 为空,说明为局部变量
set | grep IFS # 非空
a=${1:-"false}
如果1存在并且不为空那么a =1,否则就是a=false

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

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

相关文章

C++与OO思想的联系

一、C与OO思想的联系 C&#xff1a;OO思想&#xff08;面向对象--属性和行为&#xff09; 任何事务都可以被看做一个个对象&#xff0c;一个再复杂的模型结构都是由千千万万个对象组成。 OO思想两个要素&#xff1a;属性和行为(方法)。 OO思想的特点&#xff1a; 封装&#x…

单表达式倒计时工具:datetime的极度优雅(DeepSeek)

一个简单表达式&#xff0c;也可以优雅自成工具。 笔记模板由python脚本于2025-03-22 20:25:49创建&#xff0c;本篇笔记适合任意喜欢学习的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述。 Pyth…

Kubernetes的Replica Set和ReplicaController有什么区别

ReplicaSet 和 ReplicationController 是 Kubernetes 中用于管理应用程序副本的两种资源&#xff0c;它们有类似的功能&#xff0c;但 ReplicaSet 是 ReplicationController 的增强版本。 以下是它们的主要区别&#xff1a; 1. 功能的演进 ReplicationController 是 Kubernete…

CSS基础知识一览

持续维护 选择器 display 常用属性 浮动 弹性布局

IS-IS原理与配置

一、IS-IS概述 IS-IS&#xff08;Intermediate System to Intermediate System&#xff0c;中间系统到中间系统&#xff09;是ISO&#xff08;International Organization for Standardization&#xff0c;国际标准化组织&#xff09;为它的CLNP&#xff08;ConnectionLessNet…

【前端】Visual Studio Code安装配置教程:下载、汉化、常用组件、基本操作

文章目录 一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2、view-in-browser3、Live Server 四、基本操作五、感谢观看&#xff01; 一、Visual Studio Code下载 下载官网&#xff1a;https://code.visualstudio.com/ 进入官网后点击右上角的Download &…

git推送代码相关学习——(一)

推荐去阅读一下廖老师的git相关的教程https://liaoxuefeng.com/books/git/introduction/index.html 这个系列就来学习一下git操作。 第一步&#xff0c;新建项目 去github中新建一个项目&#xff0c;然后依据项目来进行本地的开发工作。 第二步&#xff0c;拉取项目 git c…

CMS网站模板设计与用户定制化实战评测

内容概要 在数字化转型背景下&#xff0c;CMS平台作为企业内容管理的核心载体&#xff0c;其模板架构的灵活性与用户定制能力直接影响运营效率。通过对WordPress、Baklib等主流系统的技术解构发现&#xff0c;模块化设计理念已成为行业基准——WordPress依托超过6万款主题库实…

Maya基本操作

基本操作 按住ALT键&#xff0c;左键旋转视角&#xff0c;中键平移视角&#xff0c;右键放大缩小视角。 按空格键切换4格视图。 导入FBX格式文件后&#xff0c;无贴图显示。 按6键开启。着色纹理显示 坐标轴相关 修改菜单-左键最上面的虚线。固定修改选项窗口。 选中物体…

政安晨【超级AI工作流】—— 使用Dify通过工作流对接ComfyUI实现多工作流协同

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 目录 一、准备工作 Dify跑起来 ollama局域网化配置 Dify配置并验证 启动ComfyUI 二、…

【蓝桥杯】12111暖气冰场(多源BFS 或者 二分)

思路 这题可以用BFS做&#xff0c;也可以用二分来做。 用二分这里只提供一个思路&#xff1a;对时间来二分查找&#xff0c;check函数就是检查在特定的时间 t 0 t_0 t0​内每一个暖气炉的传播距离能否覆盖所有格子。 用BFS做&#xff1a; 由几个点开始向外扩散&#xff0c;知道…

【云上CPU玩转AIGC】——腾讯云高性能应用服务HAI已支持DeepSeek-R1模型预装环境和CPU算力

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大三学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

【JavaEE】网络编程socket

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

超硬核区块链算法仿真:联盟链PBFT多线程仿真实现 :c语言完全详解版

1 22年年底想用gpt做出一个pbft的算法仿真&#xff0c;到了25年终于可以结合gpt grok perplexcity deepseek等实现了&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 1.1简化版 // 定义 Windows 版本&#xff0c;确保条件变量相关函数可用 #define _WIN32_W…

【并发编程】聊聊forkJoin的原理和最佳实践

对于线程池来说&#xff0c;其实本质就是一个生产者消费者的模式&#xff0c;而通过竞争的方式从队列中获取任务执行。本质上其实就是按照任务级别进行处理&#xff0c;但是对于一些可以分而治之的任务&#xff0c;传统的线程池没有办法分治处理。一是无法对大任务进行拆分&…

【数据预测】基于遗传算法GA的LSTM光伏功率预测 GA-LSTM光伏功率预测【Matlab代码#91】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. 遗传算法GA2. 长短期记忆网络LSTM3. 基于GA-LSTM的光伏功率预测4. 部分代码展示5. 运行结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 …

Java 填充 PDF 模版

制作 PDF 模版 安装 OnlyOffice 从 OnlyOffice 官网下载 OnlyOffice Desktop&#xff0c;安装过程很简单&#xff0c;一路下一步即可。用 OnlyOffice 制作 PDF 模版&#xff08;表单&#xff09; 使用 OnlyOffice 表单设计器&#xff0c;制作表单&#xff0c;如下图 注意命名…

使用安装 Kettle 教程 Pentoho 10.2.0.0-222 安装 连接mysql

流程 准备下载安装测试链接常见问题 准备 需要提前安装好 JDK 配置好环境变量 &#xff08;教程看前文&#xff09; 安装好mysql&#xff08;教程看前文&#xff09; 下载好pentaho链接数据库驱动 下载pentaho安装包 https://pentaho.com/wp-content/uploads/2024/04/three-s…

MySQL表的增加、查询、修改、删除的基础操作

MySQL表的增加、查询、修改、删除的基础操作 一、CRUD二、新增数据 insert2.1 单行数据 全列插入2.2 多行数据 指定列插入 三、查询 select3.1 全列查询&#xff08;select *&#xff09;3.2 指定列查询3.3 表达式查询3.4 去重&#xff1a;distinct3.5 带有排序的查询&#x…

Windows Server 2025 使用 IIS 搭建 ASP.NET 3.5 网站

开启远程桌面 参考文章Windows server开启远程桌面教程打开服务管理器。ECS 配置安全组&#xff0c;开启 3389Telnet 验证网络联通性 telnet x.x.x.x 338安装 Windows App&#xff0c;登录验证 安装 ASP.NET 3.5 1.参考文章Windows Server 2012安装 .NET Framework 3.5和 Wi…