Shell脚本备忘录

Shell脚本备忘录目录1.jq1.1安装1.2几个常用例子1.2.1取出数组index=0的内容1.2.2取出数组index=0的name的内容1.2.3以key-value的格式取出数组index=0的name和city1.2.4以key-value的格式取出所有数组的name和city1.2.5以key-value的格式取出数组index=0的name和arrayBrowser的index=1的url1.2.6以key-value的格式取出所有数组的name和city并放在一个数组里(前后加上[])1.

大家好,又见面了,我是你们的朋友全栈君。

1. jq

jq可以对json数据进行分片、过滤、映射和转换,和sed、awk、grep等命令一样

1.1 安装

yum -y install jq

1.2 几个常用例子

以这个json结构为例子进行解析,假设文件命名为:json.txt

[{ 
   
	"name": "站长工具",
	"url": "http://tool.chinaz.com",
	"address": { 
   
		"city": "厦门",
		"country": "中国"
	},
	"arrayBrowser": [{ 
   
		"name": "Google",
		"url": "http://www.google.com"
	}, { 
   
		"name": "Baidu",
		"url": "http://www.baidu.com"
	}]
}, { 
   
	"name": "站长之家",
	"url": "http://tool.zzhome.com",
	"address": { 
   
		"city": "大连",
		"country": "中国"
	},
	"arrayBrowser": [{ 
   
		"name": "360",
		"url": "http://www.so.com"
	}, { 
   
		"name": "bing",
		"url": "http://www.bing.com"
	}]
}]

1.2.1 取出数组index=0的内容

cat json.txt | jq '.[0]'

在这里插入图片描述

1.2.2 取出数组index=0的name的内容

cat json.txt | jq '.[0].name'

在这里插入图片描述

1.2.3 以key-value的格式取出数组index=0的name和city

cat json.txt | jq '.[0] | {name:.name, city:.address.city}'

在这里插入图片描述

1.2.4 以key-value的格式取出所有数组的name和city

cat json.txt | jq '.[] | {name:.name, city:.address.city}'

在这里插入图片描述

1.2.5 以key-value的格式取出数组index=0的name和arrayBrowser的index=1的url

cat json.txt | jq '.[0] | {name:.name, url: .arrayBrowser[1].url}'

在这里插入图片描述

1.2.6 以key-value的格式取出所有数组的name和city并放在一个数组里(前后加上[])

cat json.txt | jq '[.[] | {name:.name, city:.address.city}]'

在这里插入图片描述

1.2.7 以key-value的格式取出所有数组的name和city并放在一个数组里并修改name为name2,city为city2

cat json.txt | jq '[.[] | {name2:.name, city2:.address.city}]'

在这里插入图片描述

2. $

  • $0 :Shell 的命令本身
  • $1-9 :表示 Shell 的第几个参数
  • $? :显示最后命令的执行情况
  • $# :传递到脚本的参数个数
  • $$ :脚本运行的当前进程 ID 号
  • $* :以一个单字符串显示所有向脚本传递的参数
  • $! :后台运行的最后一个进程的 ID 号
  • $- :显示 Shell 使用的当前选项
  • $(命令) :执行并获取命令输出

2.1 引用变量用法

  • 直接引用

    [root@localhost testShell]# x=1024
    [root@localhost testShell]# echo $x
    x
    
  • 利用双引号

    [root@localhost testShell]# x=1024
    [root@localhost testShell]# echo "x=$x"
    x=1024
    
  • 使用 ${ } 作为单词边界

    [root@localhost testShell]# x=1024
    [root@localhost testShell]# echo "x=${x}-123"
    x=1024-123
    
  • 使用 ${#} 获取变量字符串长度

    [root@localhost testShell]# x=1024
    [root@localhost testShell]# echo "length=${#x}"
    length=4
    

2.2 引用脚本或函数参数

  • 1 表示 Shell 脚本文件名,n 从 2 开始表示第 n 个参数,第 2 个参数是 $2

    [root@localhost testShell]# echo 'echo $1 $2 $3' > hello.sh
    [root@localhost testShell]# cat hello.sh 
    echo $1 $2 $3
    [root@localhost testShell]# sh hello.sh 1 2 3
    1 2 3
    
  • 使用 $# 获取脚本或函数参数的个数

    [root@localhost testShell]# echo 'echo $#' > hello.sh
    [root@localhost testShell]# cat hello.sh 
    echo $#
    [root@localhost testShell]# sh hello.sh 1 2 3 4 5 6 
    6
    

2.3 上条命令的返回值

使用 $? 上条命令的返回值。

0:表示没有错误,其他任何数值:表示有错误。

[root@localhost testShell]# echo 111 > 1.sh
[root@localhost testShell]# rm 2.sh
rm: cannot remove ‘2.sh’: No such file or directory
[root@localhost testShell]# echo $?
1
[root@localhost testShell]# rm 1.sh 
rm: remove regular file ‘1.sh’? y
[root@localhost testShell]# echo $?
0

2.4 执行并获取命令输出

[root@localhost testShell]# echo $(date)
Tue Aug 17 06:50:29 EDT 2021

2.5 获取当前进程 ID

[root@localhost testShell]# echo $$
80329

2.6 获取后台运行的最后一个进程 ID

[root@localhost testShell]# echo 'ping www.baidu.com' > ping.sh
[root@localhost testShell]# tail -f ping.sh &
[1] 88991
[root@localhost testShell]# echo $!
88991
[root@localhost testShell]# kill $!
[root@localhost testShell]# echo $!
88991
[1]+  Terminated              tail -f ping.sh

2.7 获取 Shell 选项

[root@localhost testShell]# echo $-
himBH

3. “

被`包含的内容会直接执行

4. 去掉字符串最外面双引号

echo "内容" | sed 's/\"//g'

5. debug模式

set -x

6. 字符替换

/要替换的字符串(只找第一个)/替换成的字符串
//要替换的字符串(全部替换)/替换成的字符串

[root@localhost testShell]# url=www.baiud.com
[root@localhost testShell]# echo ${net/baidu/google}
www.google.com
[root@localhost testShell]# echo ${net//./-}
www-baidu-com
[root@localhost testShell]# echo ${net/./-}
www-baidu.com

7. 字符串截取

#查找的字符串
%查找的字符串

[root@localhost testShell]# url=www.baiud.com
[root@localhost testShell]# echo ${url#*www.}
baidu.com
[root@localhost testShell]# echo ${url%*.com}
www.baidu

8. =赋值的时候,两边不能出空格,不然会被认为是命令

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152901.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • moebius for sql server下载_大数据集群规模选择

    moebius for sql server下载_大数据集群规模选择一、Moebius集群的架构及原理1、无共享磁盘架构Moebius集群采用无共享磁盘架构设计,各个机器可以不连接一个共享的设备,数据可以存储在每个机器自己的存储介质中。这样每个机器就不需要硬件上的

    2022年8月6日
    23
  • Vs下 CCriticalSection::Lock 异常错误的发生「建议收藏」

    Vs下 CCriticalSection::Lock 异常错误的发生「建议收藏」自己在vs下写了一个用 CCriticalSection::Lock来锁定对象的程序,发现给Lock设置dword参数时总会出现异常,后来查看了一下函数的文档,才恍然大悟!!!CCriticalSection类包含成员函数锁定的线程可用于获得一个关键部分对象的所有权。有两个版本的锁定功能没有参数和其他采用DWORD参数之一。后一种版本的锁定文档状态dword值参数指定

    2022年7月20日
    15
  • 煤矿人员定位系统(福利院上班怎么样)

    每个孩子都是祖国的花朵,他们的健康成长是我们的责任.尤其是福利院的孩子,他们被遗弃,孩子的心理已经造成了创伤,此时,孩子们的心理及身体的健康,我们必须实时监控.这样我们就可以对孩子们进行实时监控,随时随地的了解孩子们的生命体征的各项数据.例如,孩子的血压,心跳等等.甚至还可以使用尿湿监测系统.对孩子的生理问题进行监测.福利院人员定位技术背景:福利院人员定位办理体系,将射频识别技术应用于孩子定位办理,别离于每个房间门口和每个楼层的出口以及每栋楼门口和公寓门口…

    2022年4月16日
    50
  • TypeScript基础入门之Javascript文件类型检查(二)「建议收藏」

    TypeScript基础入门之Javascript文件类型检查(二)「建议收藏」TypeScript基础入门之Javascript文件类型检查(二)

    2022年4月20日
    40
  • 深度信念网络(Deep Belief Network)[通俗易懂]

    深度信念网络(DeepBeliefNetwork,DBN)由GeoffreyHinton在2006年提出。它是一种生成模型,通过训练其神经元间的权重,我们可以让整个神经网络按照最大概率来生成训练数据。我们不仅可以使用DBN识别特征、分类数据,还可以用它来生成数据。DBN由多层神经元构成,这些神经元又分为显性神经元和隐性神经元(以下简称显元和隐元)。显元用于接受输入,隐…

    2022年4月12日
    224
  • hashmap的底层实现原理_hashtable底层数据结构

    hashmap的底层实现原理_hashtable底层数据结构一:HashMap底层实现原理解析我们常见的有数据结构有三种结构:1、数组结构2、链表结构3、哈希表结构下面我们来看看各自的数据结构的特点:1、数组结构:存储区间连续、内存占用严重、空间复杂度大优点:随机读取和修改效率高,原因是数组是连续的(随机访问性强,查找速度快)缺点:插入和删除数据效率低,因插入数据,这个位置后面的数据在内存中都要往后移动,且大小固定不易动态扩展。2、链表结构:存储区间离散、占用内存宽松、空间复杂度小优点:插入删除速度快,内存利用率高,没有固定大小,扩展灵活

    2022年9月11日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号