linux-1-shell

shell脚本(本文以Bash为基础)

要特别注意空格!!!
shell一般用于数据的导入导出、文本传输、作业调度
只有单行注释
shell大多数命令可以直接在linux内运行在shell脚本中写入代码时要先写入 #!/bin/bash
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序

一、变量

1 定义变量

1.1 直接赋值

shell脚本中没有数据类型的概念(可都看作字符串类型)
var_n=v_ar #等号左右不能有空格readonly st_r#只读 【了解】

1.2 `` 赋值

var_n=`c_md`
#将命令结果赋值给变量
#如果命令结果为多行,则 赋值给变量后 用空格分开 放在同一行   

2 命名规则

命名只能使用英文字母,数字和下划线
字符不能以数字开头,但可以用下划线
大小写敏感
中间不能有空格
不能使用标点符号
不能使用bash里的关键字(可用help命令查看保留关键字)

3 字符串操作

$s_tr1 $s_tr                #拼接 写在一起即可
${#s_tr}                    #长度
${s_tr:i_ndex:n_um}         #截取 起始位置加长度
${$s_tr//old_str/new_str}   #替换#没有的操作:位置''和""
放在""中的变量可被识别解析
放在''中的变量只能原样输出
"${s_tr1}str_2"     #${s_tr1}保证了只调用s_tr1变量

4 参数传递

4.1 文件参数传递

执行sh文件时输入
./sh_n.sh par_n1 par_n2 par_3 ...
在sh文件内的 $1 $2 $3 ... 的值则对应以上参数值
注意当参数个数大于等于10时 ${11} 才表示对应参数此外:
$*     #所有参数(可以进行遍历)
$#     #参数个数
$0     #此sh文件的名称

4.2 管道符

将管道符左边指令的结果传给右边的命令当做参数ls -l | wc -l                  #将ls -l打印的结果创给wc,统计ls -l打印的行数date "+%F" | cut -c 6-7        #将当前时间的年月日传递给cut作为参数

5 数组

5.1 数组定义

array_n=(str_1 str_2 str_3)

5.2 数组操作

echo $array_n               #只能获取个
echo ${array_n[i_ndex]}     #获取下标为index的数据
echo ${array_n[*|@]}        #获取全部数据
echo ${#aarray_n[*]}        #长度array[i_ndex]=s_tr          #修改|添加数据
unset arr[i_ndex]           #删除数据

5.3 数组遍历

for i in ${arr[*]}; do #遍历数组echo $i
done

二、运算符

1 算数运算符

$[a+b] $[a-b] $[a*b] $[a/b] 
$[a%b]      #取余
$[a**b]     #幂
$[(a+b)*b]  #可用括号

2 比较运算符

$a -eq $b  #(equal)判断是否相等 等价于 $a == $b 
$a -ne $b  #(not equal)判断是否不相等 等价于 $a != $b 
$a -gt $b  #(greater than)判断是否大于
$a -lt $b  #(less than)判断是否小于
$a -ge $b  #(greater than or equal)判断是否大于等于
$a -le $b  #(less than or equal)判断是否小于等于比较运算符不容易在linux中直接运行
用条件语句形式写入shell文件再执行,【例】
#!/bin/bash
a=10
b=3
if [ $a -eq $b ]; thenecho 'a=b'
elseecho 'a<>b'
fi

3 逻辑运算符

#与
if后的条件  [ $a -gt 0 -a $b -gt 0 ] 等价于 [[ $a -gt 0 && $b -gt 0 ]]等价于 ((a>0 &&b>0))   #(())这种形式使得大多数c语言都可以在shell中运行#或
if后的条件  [ $a -gt 0 -o $b -gt 0 ] 等价于 [[ $a -gt 0 || $b -gt 0 ]]#非【了解】
if后的条件 [ ! $a -gt 0 ]逻辑运算符不容易在linux中直接运行
用条件语句形式写入shell文件再执行,【例】
#!/bin/bash 
a=10
b=3
if [ $a -gt 0 -a $b -gt 0 ]; thenecho '都大于0'
elseecho '不都大于0'
fiif [[ $a -gt 0 && $b -gt 0 ]]; thenecho '都大于0'
elseecho '不都大于0'
fi
if((a>0 &&b>0)); thenecho "都大于0"
fi

4 字符串运算符

$a = $b     #判断是否相等
$a != $b    #判断是否不相等
-z $a       #判断a长度是否为零
-n $a       #判断a长度是否不为零
$a          #判断a是否不为空

5 文件测试运算符

 -e $f #判断文件或目录是否存在-f $f #判断文件是否存在-d $f #判断目录是否存在-r|w|x $f #判断是否可读|写|执行

三、输入输出

1 输入

#read输入
read -p "请输入一个整数" var_n #“-p”是用于给提示

2 输出

2.1 echo

echo $a                 #echo输出 自动换行
echo -n s_tr            #不换行
echo -e s_tr\n          #使“\n”为换行符
man echo                #查看命令的详细信息注意:
echo *                  #得 “shell”
echo "*"                #得 “*”
echo $a*$b=$[a*b]       #此处“*”被认为是字符
echo $a * $b=$[a*b]     #此处“*”被认为是“shell”echo "$a*$b=$[a*b]"     #此处“*”被认为是字符            #双引号里出$调用变量为其值,其他均为字符
echo "$a * $b=$[a*b]"   #此处“*”被认为是字符

2.2 printf

printf #默认不换行 默认支持转义符“\n”

3 重定向

3.1 输入重定向

一般从中端读取输入,重定向就是其他地方的内容读取输入
c_md < f_ile        #将输入重定向到文件【知识例】
read var_n < f_ile  # read var_n 后需要一个输入 “< file”表示将file内的文件内容输入给var_n#但是注意:此处 var_n 只能获取 file 的行内容
wc -l f_ile         #返回 f_ile内容的行数 和 文件名
wc -l < f_ile       #仅返回 f_ile内容的行数(此处仅把f_ile的内容传递给wc 故无文件名)
wc -l << EOF
> val_1
> val_2
> val_2
> EOF               #返回3( EOF 一次性读取多行内容传给命令)

3.2 输出重定向

c_md > f_ile        #将命令的结果覆盖到文件中
c_md >> f_ile       #将命令的结果追加的文件中

四、控制

1 条件语句

1.1 定义

if condition_1; then #命令不能为空(否则)command_1
elif condition_2; thencommand_2
elsecommand_3
fi【例】
if ((year_n%400==)); thenecho "是闰年"
elif ((year_n%4==&&yera_n%100!=)); thenecho "是闰年"
elseecho "不是闰年"
fi

1.2 补充

Bash中的 true 和 false 并非一般情况下的意义
在编写Bash脚本时尽量不要使用

2 循环语句

2.1 while

while c_ond; do #进入循环的条件c_md
done    

2.2 for

2.2.1 对空格隔开的元素进行遍历

for i in v_ar; doc_mds
done#v_ar可以是数组,甚至直接是“1 2 3 4 5”(linux的目录也满足这种要求)
var_n=`c_md` #``反引号(把反引号内的命令的打印结果传递给其他变量)
var_n=$(c_md)
【展示例】
var_n=`pwd`
var_n=$(pwd)

2.2.2 仿C语言

for ((c语法)); do #c语法中使用变量可不用“$”c_mds
done

2.3 until

until c_ond; do #退出循环的条件c_mds
done

2.4 跳出循环

2.4.1 continue

跳出当前循环,下一次循环仍可进行

2.4.2 break

跳出全部循环

五、函数

这里的函数不具有一般编程语言里的函数性质
仅仅是重复运行函数里的代码

1 定义

[function] func_n()
{a_ction;[return i_nt;]
}
#可以不带function直接定义函数
#函数必须在使用之前定义

2 使用

直接输入函数名即可运行

3 返回值

如果没有return 则将后一行命令的运行结果作为返回值#似乎是全部内容!待确定
return后跟数值(范围在0-255)
$? 获取返回值

4 参数

调用函数时可以向里面传递参数
func_name par_1 par_2 ...
#函数内部的 $1 $2 就代表传入的 参数1 参数2
#注意当参数个数大于等于10时 ${11} 才表示对应参数

5 补充 日志函数

记录日志的函数#时间,用户,级别(info,error,warning),发生了什么
function log()
{
lev=$1
info=$2
echo `date "+%F %T"` `whoami` $lev $info >> 1.log
}
log info "导出成功"
log error "因为权限有问题,导出失败"

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

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

相关文章

保姆级银河麒麟V10高级服务器离线安装mysql5.7数据库

离线在银河麒麟高级操作系统v10安装mysql5.7 下载mysql5.7 MySQL :: Download MySQL Community Server (Archived Versions) 2、把下载好的包上传到服务器 3、解压 [root1-0001 ~]# cd /data/mysql[root1-0001 mysql]# tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz…

artifactory配置docker本地存储库

​一、概述 本地 Docker 存储库是我们部署和托管内部 Docker 镜像的位置。实际上&#xff0c;它是一个 Docker 注册表&#xff0c;能够托管的 Docker 镜像的集合。通过本地存储库&#xff0c;你可以保存、加载、共享和管理自己的 Docker 镜像&#xff0c;而无需依赖于外部的镜像…

Entropy 题解 Huffman编码 优先队列

Entropy 题目描述 An entropy encoder is a data encoding method that achieves lossless data compression by encoding a message with “wasted” or “extra” information removed. In other words, entropy encoding removes information that was not necessary in t…

Mac和VScode配置fortran

最近更换了mac电脑&#xff0c;其中需要重新配置各类软件平台和运行环境&#xff0c;最近把matlab、gmt、VScode、Endnote等软件全部进行了安装和配置。但是不得不说&#xff0c;mac系统对于经常编程的人来说还是非常友好的&#xff01; 由于需要对地震位错的程序进行编译运行…

【继承和多态】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;…

KEITHLEY(吉时利)2440源测量单位(SMU)数字源表

KEITHLEY(吉时利&#xff09;2440源测量单位&#xff08;SMU)数字源表 主要特性 50W 时性能高达 5A / 40V0.012&#xff05; 基本测量精度&#xff0c;具有 6 位分辨率10pA / 100nV 测量分辨率与 KickStart 软件结合使用美国2440吉时利keithley数字源表特点 2400系列提供宽动…

动态链接是什么?在JVM中,类、对象、方法是如何交互的?

什么是动态链接&#xff1f; 常量池是JVM中存储字面量&#xff08;literal&#xff09;和符号引用&#xff08;symbolic reference&#xff09;的地方。在类加载的过程中&#xff0c;类文件的常量池中的符号引用会被解析成直接引用&#xff0c;这个过程就是动态链接。 动态链接…

windows10 安装iis 跑asp.net

场景 有个asp.net 需要部署在普通的windows10电脑上&#xff0c;电脑没有启用iis。需要配置下iis&#xff0c;这里记录下应用程序中必须要选中的一些选项。 步骤 打开控制面板&#xff0c;然后选择 程序 -> 启用或关闭 Windows 功能 -> Internet Information Services…

需求 分析

需求分析的任务 需求分析的任务 1、需求分析是软件定义时期的最后一个阶段&#xff0c;它的基本任务是准确地回答“系统必须做什么?”这个问题。 2、确定系统必须完成哪些工作&#xff0c;也就是对目标系统提出完整、准确、清晰、具体的要求。 3、系统分析员应该写出软件需求…

Spring Boot 集成 tk.mybatis

一 Spring Boot 集成 tk.mybatis tk.mybatis 是 MyBatis 的一个插件&#xff0c;用于简化 MyBatis 的开发。 1.添加依赖 Spring Boot 项目中的 pom.xml 文件中添加 MyBatis、TkMyBatis 和 MySQL的依赖。 <dependency><groupId>tk.mybatis</groupId><a…

17:缓存机制-Java Spring

目录 17.1 为什么需要缓存17.2 Redis 简介17.3 不同类型的缓存技术对比17.4 缓存机制在Java Spring框架中的应用17.5 应用场景17.6 注意事项 17.1 为什么需要缓存 1. 提升性能 缓存的核心价值在于将数据临时存储在快速访问的介质&#xff08;如内存&#xff09;中&#xff0c…

Xbox VR头盔即将推出,但它是Meta Quest的‘限量版’。

&#x1f4f3;Xbox VR头盔即将推出&#xff0c;但它是Meta Quest的‘限量版’。 微软与Meta合作推出限量版Meta Quest VR头映射Xbox风格&#xff0c;可能是Meta Quest 3或未来版本的特别定制版&#xff0c;附带Xbox控制器。这一合作是Meta向第三方硬件制造商开放其Quest VR头盔…

conda出现http429报错:CondaHTTPError: HTTP 429 TOO MANY REQUESTS for url <xxx>

我的报错信息如下&#xff1a; CondaHTTPError: HTTP 429 TOO MANY REQUESTS for url <https://mirrors.ustc.edu.cn/anaconda/pkgs/main/linux-64/current_repodata.json> Elapsed: 00:46.305607An HTTP error occurred when trying to retrieve this URL. HTTP errors…

ros程序项目打包deb 详细过程以及报错解决

需要注意,最好是 ubuntu 20的 系统, 18 的系统支持不足够 CMakeLists.txt 最后添加, xxxxx 是你的节点或者程序的名称,也就是最后运行的ros节点名称: install(TARGETS xxxxxx ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} LIBRARY DESTINATION ${CATKI…

C语言如何⽤指针表示多维数组?

一、问题 如何⽤指针表示多维数组&#xff1f; 二、解答 这⾥就是以⼆维数组为例进⾏多维数组的操作演示。 ⾸先定义⼀个⼆维数组 int a[3][3] &#xff0c;数组名代表的是数组的起始地址&#xff0c;因此数组名 a 和第⼀个元素 a[0][0] 的地址是相同的&#xff0c;但是意义却…

小塔 | 时尚领域RFID应用,别人早你一步!

优衣库&#xff0c;作为知名服装品牌零售商&#xff0c;近年来在数字化转型的道路上取得了显著的成果。其中&#xff0c;RFID技术的应用成为了优衣库提升运营效率、优化客户体验以及实现精准营销的重要工具。 RFID助力时尚门店品牌升级 优衣库深知RFID技术的潜力&#xff0c;将…

计算机网络3——数据链路层3以太网的MAC层

文章目录 一、MAC 层的硬件地址1、介绍2、注意点3、定制标准 二、MAC 帧的格式1、结构2、工作原理3、其他 一、MAC 层的硬件地址 1、介绍 在局域网中&#xff0c;硬件地址又称为物理地址或 MAC地址(因为这种地址用在MAC帧中)。 大家知道&#xff0c;在所有计算机系统的设计中…

计算机视觉——两视图几何求解投影矩阵

上文我提到了通过图像匹配得到基本矩阵&#xff0c;接下来我们要接着求解投影矩阵。 计算投影矩阵思路 假设两个投影矩阵为规范化相机&#xff0c;因此采用基本矩阵进行恢复。在规范化相机下&#xff0c; P [ I ∣ 0 ] P[I|0] P[I∣0], P ′ [ M ∣ m ] P[M|m] P′[M∣m]。…

apache和IIS区别?内网本地服务器项目怎么让外网访问?

Apache和IIS是比较常用的搭建服务器的中间件&#xff0c;它们之间还是有一些区别差异的&#xff0c;下面就详细说说 Apache和IIS有哪些区别&#xff0c;以及如何利用快解析实现内网主机应用让外网访问。 首先说说apache和IIS最基本的区别。Apache运行的操作系统通常为Unix或Lin…

Mysql — 刷题知识点

一. 功能函数 1. 大小写转换 UCASE/LCASE (列名) LCASE是将内容转换为小写 UCASE将内容转换为大写 CASE是条件控制语句的关键字 二、join ... on 问题 1. right join ..on RIGHT JOIN 关键字会返回右表 (t2) 所有的行&#xff0c;即使在左表 (t1) 中没有匹配的行。或者更…