shell编程入门知识

2023-11-16

1、realpath 获取文件绝对路径

kylin@kylin-D2000:~/crystalmedia/scripts$ realpath activeMq_docker.sh 
/home/kylin/crystalmedia/scripts/activeMq_docker.sh
kylin@kylin-D2000:~/crystalmedia/scripts$ 

2、if语句
if主要注意空格,if与[ 然后[]前后各一个空格

if [ ! -f "${filename}" ]
then
  echo "File '${filename}' NOT exists!"
  exit 1
fi

或者这种写法

if [ ! -f "${filename}" ];then
  echo "File '${filename}' NOT exists!"
  exit 1
fi

备注:

基本上和其他脚本语言一样。没有太大区别。不过值得注意的是。[]里面的条件判断。
1、字符串判断

str1 = str2      当两个串有相同内容、长度时为真
str1 != str2      当串str1和str2不等时为真
-n str1        当串的长度大于0时为真(串非空)
-z str1        当串的长度为0时为真(空串)
str1           当串str1为非空时为真

2、数字的判断

int1 -eq int2    两数相等为真
int1 -ne int2    两数不等为真
int1 -gt int2    int1大于int2为真
int1 -ge int2    int1大于等于int2为真
int1 -lt int2    int1小于int2为真
int1 -le int2    int1小于等于int2为真

3、文件的判断

-r file     用户可读为真
-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真

4、复杂逻辑判断

-a         与
-o        或
!        非

3、pushd和popd
pushd和popd是对一个目录栈进行操作,而dirs是显示目录栈的内容。而目录栈就是一个保存目录的栈结构,该栈结构的顶端永远都存放着当前目录(这里点从下面可以进一步看到)。

dirs常用的有两个参数:

选项
含义
-p
每行显示一条记录
-v
每行显示一条记录,同时展示该记录在栈中的index
-c
清空目录栈

目录栈中只有一个目录(当然是在栈顶),就是当前所在的目录。当切换目录之后,栈中的目录也随之改变。通过-c选项可以将目录栈中除当前目录之外的其它目录清除,由于上面的例子中目录栈只包含当前目录,所以没有变化。

每次pushd命令执行完成之后,默认都会执行一个dirs命令来显示目录栈的内容。pushd的用法主要有如下几种:
pushd 目录

pushd后面如果直接跟目录使用,会切换到该目录并且将该目录置于目录栈的栈顶。(时时刻刻都要记住,目录栈的栈顶永远存放的是当前目录。如果当前目录发生变化,那么目录栈的栈顶元素肯定也变了;反过来,如果栈顶元素发生变化,那么当前目录肯定也变了。)下面是一个例子:

kylin@kylin-D2000:~$ pushd crystalmedia/test/
~/crystalmedia/test ~
kylin@kylin-D2000:~/crystalmedia/test$ pushd /opt/
/opt ~/crystalmedia/test ~
kylin@kylin-D2000:/opt$ popd
~/crystalmedia/test ~
kylin@kylin-D2000:~/crystalmedia/test$ popd
~
kylin@kylin-D2000:~$ 

通过上面的例子可以知道,用pushd来替换cd是非常有用的。

pushd和popd两者的+n
pushd +n
pushd +n切换到目录栈中的第n个目录(这里的n就是dirs -v命令展示的index),并将该目录以栈循环的方式推到栈顶。
popd +n
将目录栈中的第n个元素删除(这里的n就是命令dirs -v显示的目录index)
在脚本中我们通常不愿意dirs显示出来,所以通过

 pushd 目录 >/dev/null
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell编程入门知识 的相关文章

  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • Apache 端口转发 80 到 8080 并访问 Apache (80) 中托管的应用程序,即 phpMyadmin 和 Tomcat (8080)

    我想访问托管在 tomcat 服务器 8080 中的应用程序 myapp 当前可以通过以下方式访问http example com 8080 myapp http example com 8080 myapp in http example
  • 对于任何真实数据集,数据压缩比的最小可能值是多少

    我在写信ZLIB类似于嵌入式硬件压缩器的 API 它使用 deflate 算法来压缩给定的输入流 在进一步讨论之前 我想解释一下数据压缩率 数据压缩率定义为未压缩大小与压缩大小之间的比率 压缩比通常大于一 这意味着压缩数据通常比未压缩数据小
  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • 使用 systemctl 获取 systemd 进程的正常运行时间或停机时间?

    喜欢使用systemctl is active
  • 更新Linux中的包含路径

    我的 my path to file 文件夹中有几个头文件 我知道如何将这些文件包含在新的 C 程序中 但每次我都需要在包含它之前输入头文件的完整路径 我可以在linux中设置一些路径变量 以便它自动查找头文件吗 您可以创建一个 makef
  • 为什么 OS X 和 Linux 之间的 UTF-8 文本排序顺序不同?

    我有一个包含 UTF 8 编码文本行的文本文件 mac os x cat unsorted txt foo foo 津 如果它有助于重现问题 这里是文件中确切字节的校验和和转储 以及如何自己生成文件 在 Linux 上 使用base64 d
  • Docker忽略limits.conf(试图解决“打开文件太多”错误)

    我正在运行一个 Web 服务器 该服务器正在处理数千个并发 Web 套接字连接 为了实现这一点 在 Debian linux 我的基本镜像是 google debian wheezy 在 GCE 上运行 上 打开文件的默认数量设置为 100
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • ALSA:snd_pcm_writei 调用时缓冲区不足

    当运行我最近从灰烬中带回来的旧程序时 我遇到了缓冲区不足的情况 该程序将原始声音文件完全加载到内存中 2100 字节长 525 帧 并准备 ALSA 进行输出 44 1khz 2 通道 有符号 16 位 if err snd pcm set
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h

随机推荐

  • 任意文件查看与下载漏洞

    任意文件查看与下载漏洞 一些网站的业务需求 可能提供文件查看或下载功能 如果对用户查看或下载的文件不做限制 就能够查看或下载任意的文件 可以是源代码文件 敏感文件等等 形成漏洞的原因 存在读取文件的函数 读取文件的路径用户可控且未校验或校验
  • 羊、狼、农夫过河

    题目来自 33条消息 羊 狼 农夫过河 华为OD真题 100 keven000777的博客 CSDN博客 题目内容 这个题目比较重要的地方就是农夫回程时不能携带动物 因此问题就稍微简单了一些 我拜读了这位老哥的文章 并在他的代码基础上修改了
  • React总结7:render()渲染时机

    根据官网表示 JSX是属于一种不可变的对象 即只要一创建就不能被改变 继续我们c Java中的字符串一样 是属于常量范围 不容许改变 不能改变属性啊 孩子节点也不可以改变 这个元素就像电影中的某一帧 是处于一个确定的时间点上 不管你放多少遍
  • 互联网产品经理在线原型设计工具Cacoo(草稿)

    费注册地址 https cacoo com 注册后即可使用 用户交流地址 http www masterchat cn bbs thread 85 1 1 html Cacoo 草稿 简介 实时交互地在线制作图表 Cacoo是在线制作 发布
  • 剑指 Offer 14- I—剪绳子

    题目描述 给你一根长度为 n 的绳子 请把绳子剪成整数长度的 m 段 m n都是整数 n gt 1并且m gt 1 每段绳子的长度记为 k 0 k 1 k m 1 请问 k 0 k 1 k m 1 可能的最大乘积是多少 例如 当绳子的长度是
  • 滚动条的使用

    滚动条需要父盒子有固定的高度宽度 而且父盒子内的内容超过固定的高度宽度并使用overflow auto 就能在相应的位置出现滚动条
  • 波场通过TRON-WEB转账加备注实现

    向转账交易信息中追加 备注信息 await tronWeb transactionBuilder addUpdateData res transaction 备注信息 utf8 对已经添加备注的交易信息进行签名 let sign await
  • phpmyadmin 4.8 版本无法登陆问题

    如图 这个问题困扰题主好久了 今天晚上终于搞定 进入mysql 输入 status 得到以下信息 把 var lib mysql mysql sock 记下来 到phpmyadmin目录下的libraries 编辑config defaul
  • Visio高级使用技巧(未完待续)

    简介 Microsoft Visio是Microsoft Office的组件之一 Office三件套 Word Excel PowerPoint 的铁粉可不能错过它 Visio是一款流程图制作工具和图表绘制软件 具有与Office三件套相似
  • 虚拟机重启网卡失败记录修改方法

    1 使用systemctl status network service命令查看错误详情 2 出现这种报错一般是和 NetworkManager 服务冲突导致的 直接关闭 NetworkManger 服务就好了 关闭NetworkManag
  • 达摩院发布2021十大科技趋势(附PDF版)

    关注ITValue 看企业级最新鲜 最价值报道 刚刚 阿里巴巴达摩院发布2021十大科技趋势 这是达摩院成立三年以来第三次发布年度科技趋势 2020年是不平凡的一年 经历疫情的洗礼 许多行业重启向上而生的螺旋 但疫情并未阻挡科技前进的脚步
  • ELK的优点和局限性

    ELK作为一种开源的日志管理解决方案 具有以下优点 实时性高 ELK可以实现实时索引和搜索 支持高效的日志收集和处理 可以帮助用户及时发现问题和异常 提高系统的响应速度和稳定性 可扩展性强 ELK的架构支持水平扩展和负载均衡 可以根据需要增
  • 为什么打两拍可以消除亚稳态的影响?

    为什么打两拍可以消除亚稳态的影响 首先 我们需要了解什么是亚稳态 看下图 简单来说 就是当时钟信号上升沿到来的时候正好采样的数据也在发生变化 但是对于采样的时钟信号 如果想要采样得到一个稳定值 在clk的上升沿的前一段时间有一个建立时间TS
  • 举例说明使用MATLAB Coder从MATLAB生成C/C++代码步骤

    MATLAB Coder可以从MATLAB代码生成独立的 可读性强 可移植的C C 代码 使用MATLAB Coder产生代码的3个步骤 准备用于产生代码的MATLAB算法 检查MATLAB代码的兼容性 有些matlab代码语句并不能生成c
  • 静态代码检测

    什么是静态代码分析 静态代码分析是一种在软件开发过程中对源代码进行分析的技术 它通过检查代码的结构 语法 语义等方面 以发现潜在的错误 安全漏洞 性能问题等 并提供相应的建议和警告 与动态测试方法 如单元测试 不同 静态代码分析是在代码执行
  • 【用户体验分析报告】 按需加载组件,导致组件渲染卡顿,影响交互体验?组件拆包&预加载方案来了!

    首先 我们看一些针对 如何提升应用首屏加载体验 的文章 提到的必不可少的措施 便是减少首屏幕加载资源的大小 而减少资源大小必然会想到按需加载措施 本文提到的便是一个基于webpack 插件与 react 组件实现的一套研发高度自定义 组件按
  • [Mac SSH]如何在Terminal端删除或修改已上传文件夹

    如何在Terminal删除或修改Github已上传文件夹 Step 1 找到路径 Step 2 修改或删除文件 Step 3 Commit to Github Step 4 Push 修改 Step 1 找到路径 在Terminal 上 c
  • Git教程个人分享:如何将一个本地项目上传至远程仓库的流程

    前言 今天来分享一下 关于Git的一些教程 同时这也是我自己曾今学习Git时候的笔记 之所以更 也是方便后期自己可以去回顾 当然后面也会出一部分关于Git其他操作方面的内容 这次我们分享的是 如何将一个本地项目上传至远程仓库的流程 相信这个
  • SQL SERVER的注入要点

    SQL SERVER的注入要点 一 SQLServer数据库的查询语句 函数查询 1 select version 查询数据库的版本 2 select host name 查询主机名 如果是用navicat远程连接的话 主机名是本地的名字
  • shell编程入门知识

    1 realpath 获取文件绝对路径 kylin kylin D2000 crystalmedia scripts realpath activeMq docker sh home kylin crystalmedia scripts a