linux shell脚本相关知识
最近的项目中,有一个编写linux shell脚本的任务。由于之前不是很熟悉,在这个过程中遇到了很多困难,查找了很多资料,也收获了很多。下面是linux shell脚本中常用的知识总结。
1基础语法
1.1变量
使用一个定义过的变量,只要在变量名前面加美元符号即可
your_name="qinjx"
echo $your_name
echo ${your_name}
1.2字符串
字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号
双引号里可以有变量
双引号里可以出现转义字符
1.3传递参数
$#
表示执行脚本传入参数的个数
$*
表示以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$
表示脚本运行的当前进程ID号
$@
与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$0
表示执行脚本名称
$1
表示第一个参数
$?
显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
1.4基本运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
val=`expr 2 + 2`
条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
乘号(*)前边必须加反斜杠()才能实现乘法运算;
if...then...fi 是条件语句,后续将会讲解。
在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 "*" 不需要转义符号 "" 。
2常用命令
2.1printf 命令
printf 命令的语法:
printf format-string [arguments...]
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
%s %c %d %f都是格式替代符
%-10s
指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f
指格式化为小数,其中.2指保留2位小数。
2.2test 命令
test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
文件表达式
-e filename
如果 filename存在,则为真
-d filename
如果 filename为目录,则为真
-f filename
如果 filename为常规文件,则为真
-L filename
如果 filename为符号链接,则为真
-r filename
如果 filename可读,则为真
-w filename
如果 filename可写,则为真
-x filename
如果 filename可执行,则为真
-s filename
如果文件长度不为0,则为真
-h filename
如果文件是软链接,则为真
filename1 -nt filename2
如果 filename1比 filename2新,则为真。
filename1 -ot filename2
如果 filename1比 filename2旧,则为真。
字符串变量表达式
If [ $a = $b ]
如果string1等于string2,则为真(字符串允许使用赋值号做等号)
if [ $string1 != $string2 ]
如果string1不等于string2,则为真
if [ -n $string ]
如果string 非空(非0),返回0(true)
if [ -z $string ]
如果string 为空,则为真
if [ $sting ]
如果string 非空,返回0 (和-n类似)
2.3read命令
-n(不换行) -p(提示语句) -n(字符个数) -t(等待时间) -s(不回显)
如:
read -p "Enter your name:" name
3压缩与解压缩
解压:tar -zxvf FileName.tar
压缩:tar -czvf FileName.tar DirName
3.1五个独立命令
压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。
-c
: 建立压缩档案
-x
:解压
-t
:查看内容
-r
:向压缩归档文件末尾追加文件
-u
:更新原压缩包中的文件
3.2 五个可选参数
根据需要在压缩或解压档案时可选的。
-z
:有gzip属性的
-j
:有bz2属性的
-Z
:有compress属性的
-v
:显示所有过程
-O
:将文件解开到标准输出
3.3 一个必选参数
-f
: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名
linux shell脚本相关知识的更多相关文章
- LINUX shell脚本相关
调试脚本 测试脚本语法:bash -n file.sh 查看脚本每一步执行情况:bash -x file.sh 位置变量:$1,$2,... 特殊变量: %?:最后一个命令的执 ...
- 读《Linux Shell脚本攻略》(第2版) 总结
前段时间读完了<Linux Shell脚本攻略>(第2版)这本书,给部分想读这本书的人分享下个人感受. 说下这本书的难度吧.纯新手或者只懂少部分编程知识的人,读起来还是有很大难度的.以我为 ...
- 读《Linux Shell脚本攻略》(第2版) 一遍、二遍体会
前段时间读完了<Linux Shell脚本攻略>(第2版)这本书,给部分想读这本书的人分享下个人感受. 第一遍体会解读:就像黑夜中的灯塔,指明前进的道路. 推荐指数:强烈推荐. 书中讲解的 ...
- 什么是Shell?Shell脚本基础知识详细介绍
这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...
- Linux Shell脚本攻略 读书笔记
Linux Shell脚本攻略 读书笔记 这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝:最有价值的当属文本处理,对这块我单独整 ...
- 老李分享:《Linux Shell脚本攻略》 要点(七)
老李分享:<Linux Shell脚本攻略> 要点(七) 1.显示给定文件夹下的文件的磁盘适用情况 [root@localhost program_test]# du -a -h ./ ...
- LINUX SHELL脚本攻略笔记[速查]
Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...
- Linux shell脚本判断服务器网络是否可以上网
Linux shell脚本判断网络畅通 介绍 在编写shell脚本时,有的功能需要确保服务器网络是可以上网才可以往下执行,那么此时就需要有个函数来判断服务器网络状态 我们可以通过curl来访问 www ...
- Linux Shell脚本编程while语句
Linux Shell脚本编程while语句案例 1,每隔3秒,打印一次系统负载 #!/bin/bash while truedo uptime sleep 3done 2,把监控结果保存 ...
随机推荐
- Python 学习笔记(基础篇)
背景:今年开始搞 Data science ,学了 python 小半年,但一直没时间整理整理.这篇文章很基础,就是根据廖雪峰的 python 教程 整理了一下基础知识,再加上自己的一些拓展,方便自己 ...
- ASP.NET Core 2.x 到 3.1 迁移指南
一.前言 今日(2019/12/4).NET Core 3.1 正式发布了,ASP.NET Core 3.1 随之发布,这次 3.0 到 3.1经过了两个月的短周期,并没有增加重大的功能,主要是对 3 ...
- Git worktree 使用笔记【转】
gitworktree 本地仓库的多个分支在对应的文件夹内管理,能够减少很多操作,便捷高效~ 一 worktree 的基本概念和操作 再也不用克隆多个仓库啦!git worktree 一个 git 仓 ...
- 如何修改PhpStorm快捷键
- c#使用CefSharp开发winform——环境搭建
因为nuget在线下载有时候很慢,所以下载nuget包,进行本地安装 登陆nuget官网https://www.nuget.org/下载相关资源 选择对应版本进行下载,同时需要下载相关依赖的包 最 ...
- leaflet实现风场图(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...
- 关于ssh的几个功能
这个有许多介绍的. 通过ssh可以实现远程shell命令行登录,x window登录,端口转发,scp文件复制,本地与远程命令间的管道连接,sftp文件传输与管理,包括同步,以及rsync文件同步,还 ...
- 学习java需要英语很好吗?
学习java需要英语很好吗? 编程语言起源于美国,是由英文构成的,其中包括几十个英文的关键字以及几百个英文的函数,除非需要对文本进行处理,否则一般不会出现中文.但是,它们都是孤立的单词,不构成任何语句 ...
- Java中文本文件的读取(按行读取)
在之前的学习过程中,经常会遇到将文本文件中的数据读取到数组或其他数据结构中.每次遇到,总是在网上搜索代码解决,解决之后并没有总结复习,因此在下一次遇到同样的问题时,又重复之前的过程.这样周而复始,并没 ...
- ansible执行带有环境变量的脚本不生效
1背景 jenkins发布时,使用ansible执行远程主机上的启动tomcat脚本发现不生效,启动tomcat的脚本中有环境变量. ansible主机为:172.16.35.8 tomcat服务器为 ...