Shell脚本 变量 语句 表达式

  • 常见的解释器
#!/bin/sh #不推荐(了解)
#!/bin/bash
#!/usr/bin/python
#!/bin/awk#!后跟的字符表示要启动的程序,该程序读取该文件执行。
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行
  • shell 函数
myShellName () {command1
}函数调用  myshellname 
变量  $myvar
如果变量的结果和其它字符串连接在一起时  为了便于区分需
要将${变量名}xxx
echo ${name}isverygood
$?:上一个命令的退出状态  0:成功   非0:失败read NUM  #输入命令 行从输入设备读入内容
echo "1+1=$NUM"
# 变量 定义变量时,变量名不用加符号$  变量名和等号之间不能有空格
variableName="variableName"
使用一个定义过的变量,只要在变量名前面加符号$
str="hello world"
echo $str
echo ${str}  # 变量名外面的花括号是可选的 加不加都行,加花括号是为了帮助解释器识别变量的边界
# 变量可以重新赋值:
str="hello world"  
str="hello world1"
# 在变量前面加readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变
readonly strstr="hello world1"
echo ${str}
# 使用 unset 命令可以删除变量  unset 不能删除只读变量
str="hello world"
unset str # 特殊变量
$0  #当前脚本的文件名 
$n  #传递给脚本或函数的参数。n 是一个数字,表示第几个参数
$*   #传递给脚本或函数的所有参数
$?    #上个命令的退出状态,或函数的返回值。
$$   # 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
  • 表达式
逻辑与: 只有两个表达式都为真时,结果才为真。
command1 && command2
逻辑或:只少有一个为真,结果就为真。
command1 || command2
格式:
[ 表达式 ]    
test 表达式  -d 是否为存在的目录 -f 是否为存在的文件 -e 是否存在
[[ 表达式 ]]
# -gt 大于 -lt 小于 -eq 等于 -ge 大于等于 -le 小于等于
test 3 -gt 2  echo $?[ 3 -gt 2 ]   echo $?
[]和内容之间一定要有空格,否则抛错。分支语句  格式一 
if  [  条件判断  ]
then
//命令
fi
格式二 
if  [  条件判断  ]; then
//命令
fi  将if反过来写,就成为fi  结束if语句  
双分支结构
if [ 条件1 ];then  
条件1成立执行,指令集1 
else
条件1不成执行指令集2 
fi
例子:
if [ $1 -gt 3 ];thenecho "$1 > 3 is true"
elseecho "$1 <= 3 is true"
fi判断用户输入的是哪个数
read -p "please input a number[1,7]:" num
case $num in
1)echo "Mon"
;;
2)echo "Tue"
;;
3)echo "Wed"
;;
4)echo "Thu"
;;
5)echo "Fir"
;;
[6-7])echo "Weekend"
;;
*)echo "please input [1,7]"
;;
esacwhile循环语句 
例子:
while true
do# 打印系统的负载日志
uptime
# 休眠2秒
sleep 2
donei=$((i+1)) #运算结果为变量赋值可以使用$(( … ))
let i=$i+1 #运算结果为变量赋值可以使用$(( … ))shell 脚本检查
sh -n script.sh   -n :不执行script,仅查询语法的问题; 
  • 定向输出
将一个命令执行结果输出到一个文件中
echo “hello world”  > hello.txt   # > 会覆盖之前内容
echo "hello world" >> hello.txt   # >>表示追加到文件尾
  • 字符串
在Shell中最常用的就是字符串和数字,字符串可使用单引号也可以使用双引号
双引号里可以有变量,单引号则原样输出
双引号里可以出现转义字符,单引号则原样输出  单引号字串中不能出现单引号,而双引可以DATE=`date`  #date本身是一个命令,可以输出当前系统的时间 注意这里用的是反引号,而不是单引号
= 检测两个字符串是否相等,相等返回 true
!= 检测两个字符串是否相等,不相等返回 true。
-z 检测字符串长度是否为0,为0返回 true。
-n 检测字符串长度是否为0,不为0返回 true
str 检测字符串是否为空,不为空返回 true

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

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

相关文章

Linux: network: tcpdump:通过分析应该抓到包了,却没找不到的另一个原因:-s

最近又遇到一个类似的问题,也是在tcpdump抓到的包里没有找到应该看到的包,搞得很迷惑。这次是现场技术给研发挖了一个坑,给带偏了。研发自己抓包,发现根本就是没有丢在主机和虚拟机之间,也不是Linux内核丢掉了包。 那怎么回事呢?如果研发从主机上抓的没有问题,而是技术…

【计算机设计大赛作品】VR项目-中国古字贾湖刻字—信息可视化赛道获奖项目深入剖析【可视化项目案例-21】

🎉🎊🎉 你的技术旅程将在这里启航! 记得看本专栏里顶置的可视化宝典导航贴哦! 🚀🚀 本专栏为可视化专栏,包含现有的所有可视化技术。订阅专栏用户在文章底部可下载对应案例完整源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不论你…

前端实现一个时间区间内,再次单选功能,使用Antd组件库内日历组件Calendar

需求&#xff1a;需要先让用户选择一个时间区间&#xff0c;然后再这个时间区间中&#xff0c;让用户再次去单选其种特殊日期。 思路&#xff1a; 1.先用Antd组件库中日期选择DatePicker.RangePicker实现让用户选择时间区间 2.在选择完时间区间后&#xff0c;用这个时间区间…

从零开始 --- 创建vue项目

1、Vue脚手架创建项目 vue create home_vue 我选择了vue3 2、引入element-plus npm i element-plus vue2 对应 npm i element-ui main.js中 import { createApp } from vue import App from ./App.vue import ElementPlus from element-plus import element-plus/theme-…

英语中疑问句

一般疑问句 Is there any tea in the cup? Do you have any children? May I have some fish? Would you like some tea? Could you give me some advices? Shall we buy some vegetables? Should you do like this? Can I borrow some money from you? Why not have …

Spring框架知识总结

目录 1、Spring框架有哪些设计模式&#xff1f; 2、介绍一下Spring框架和SpringBoot框架&#xff1f; 3、介绍一下SpringBoot具有哪些功能模块&#xff1f; 4、Spring用到了什么组件&#xff1f; 5、什么是IoC? 什么是AOP&#xff1f; 6、SpringBoot运行原理&#xff1…

鸿蒙HarmonyOS开发用什么语言

1.网上流行一句有中国底蕴的话&#xff1a;鸿蒙系统方舟框架盘古大模型。都方舟框架了肯定主推的是ArkUI框架。其实还能使用C、Java和Js开发。 2.从API8开始&#xff0c;Java语言已经从鸿蒙开发剔除了&#xff0c;而官方推荐的是ArkTs.下图是ArkTS与TS、JS的关系。 ArkTs 是TS的…

BFS:八数码问题求解

八数码原题 剖析一下BFS BFS算法是一种图遍历算法&#xff0c;它从起点开始&#xff0c;逐层扩展搜索范围&#xff0c;直到找到目标节点为止。 BFS算法一般选择队列作为节点存储的数据结构&#xff0c;我们将搜索目标节点的问题抽象为寻找目标状态&#xff0c;那么队列…

Vue3 reative回显问题

1. reactive 在做项目的时候通常会遇到这种情况&#xff0c;比如我们有一个 Table 显示数据&#xff0c;添加 Table 数据的时候使用 dialog 弹出&#xff0c;在里面填写字段然后添加。 在 vue3 中&#xff0c;对于对象的响应式定义推荐使用 reactive &#xff0c;那么可以写入…

运筹学经典问题(二):最短路问题

问题描述 给定一个图&#xff08;有向图或无向图&#xff09; G ( V , E ) G (V, E) G(V,E)&#xff0c; V V V是图中点的集合&#xff0c; E E E是图中边的集合&#xff0c;图中每条边 ( i , j ) ∈ E (i, j) \in E (i,j)∈E都对应一个权重 c i j c_{ij} cij​&#xff08;…

Android取消深色适配

从Android10&#xff08;API 29&#xff09;开始&#xff0c;在原有的主题适配的基础上&#xff0c;Google开始提供了Force Dark机制&#xff0c;在系统底层直接对颜色和图片进行转换处理&#xff0c;原生支持深色模式。当系统设置深色主题背景或者进入省电模式情况下会进入深色…

2023年烟花爆竹经营单位主要负责人证模拟考试题库及烟花爆竹经营单位主要负责人理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年烟花爆竹经营单位主要负责人证模拟考试题库及烟花爆竹经营单位主要负责人理论考试试题是由安全生产模拟考试一点通提供&#xff0c;烟花爆竹经营单位主要负责人证模拟考试题库是根据烟花爆竹经营单位主要负责人…

C++ STL容器概览

容器概览 容器分类 顺序容器提供对元素&#xff08;半开&#xff09;序列的访问。 vectorlistforward_listdeque 关联容器提供基于关键字的关联查询。 有序关联容器&#xff1a;通常用平衡二叉树&#xff08;红黑树&#xff09;实现。 mapmultimapsetmultiset 无序关联容器&a…

NestJS使用gRPC实现微服务通信

代码仓库地址&#xff1a;https://github.com/zeng-jc/rpc-grpc-practice 1.1 基本概念 gRPC 基于 Protocol Buffers&#xff08;protobuf&#xff09;作为接口定义语言&#xff08;IDL&#xff09;&#xff0c;意味着你可以使用 protobuf 来定义你的服务接口&#xff0c;gRP…

【HDFS面试】HDFS面试题答案

题目 HDFS文件写入和读取流程 HDFS组成架构 介绍下HDFS&#xff0c;说下HDFS优缺点&#xff0c;以及使用场景 HDFS作用 HDFS的容错机制 HDFS的存储机制 HDFS的副本机制 HDFS的常见数据格式&#xff0c;列式存储格式和行存储格式异同点&#xff0c;列式存储优点有哪些? …

【环境搭建】Win10下安装Docker

下载地址 Docker Windows 桌面版下载地址 各镜像下载地址 可能遇到的问题 安装后一直显示以下文字 Starting the Docker Engine… Docker Engine is the underlying technology that runs containers 请尝试使用此方法&#xff1a;https://zhuanlan.zhihu.com/p/667495068

RGB颜色表示法(RGBA解释) 以及常见的色调

RGB&#xff1a;代表red&#xff0c;green&#xff0c;blue。即用这三个色调表示所有颜色。 表示方式如&#xff1a;&#xff08;255,255,255&#xff09;白色、&#xff08;0,0,0&#xff09;黑色 改变三个不同的数值可以得到不同的颜色&#xff0c;数值取值范围为0-255&#…

【shell脚本实战案例】awk实现行转列数据变换

问题背景&#xff1a; awk&#xff08;“Aho, Weinberger, and-Kernighan”&#xff09; 是一种文本处理工具&#xff0c;用于从输入文件中提取并输出指定的信息。它以行为单位读取文件&#xff0c;并根据用户定义的模式和操作来处理每一行数据。 awk命令是一种强大的编程语…

设计模式——模板方法模式

引言 模板方法模式是一种行为设计模式&#xff0c; 它在超类中定义了一个算法的框架&#xff0c; 允许子类在不修改结构的情况下重写算法的特定步骤。 问题 假如你正在开发一款分析公司文档的数据挖掘程序。 用户需要向程序输入各种格式 &#xff08;PDF、 DOC 或 CSV&#…

Ubuntu 常用命令之 cp 命令用法介绍

cp命令在Ubuntu系统中用于复制文件或目录。它的基本格式是cp [选项] 源文件或目录 目标文件或目录。 以下是一些常用的cp命令选项 -i&#xff1a;在覆盖目标文件之前将给出提示。-r或-R&#xff1a;递归复制&#xff0c;用于目录的复制操作。-v&#xff1a;详细模式&#xff…