shell数组

SHELL脚本学习笔记

浪尽此生 提交于 2019-11-29 12:19:51
SHELL脚本学习笔记 创建可执行的 SHELL 脚本 touch shell.sh chmod +x shell.sh # 授权:可执行 内建函数 # 打印 echo # 不换行打印 echo -n 变量 # 变量命名规范:字母、数字和下划线 # 取变量值: ${variable_name} 或者 $variable_name # 获取命令结果的值:$(command_name) 或者 command_name # 定义只读变量 readonly variable_name # 删除变量(不能删除只读变量):unset variable_name # SHELL变量作用域:局部变量、全局变量、环境变 SHELL 特殊变量 变量 含义 $0 当前脚本的文件名 $n (n>=1) 传递给脚本或者函数的参数。n 表示第一个参数,${10}… $# 传递给脚本或者函数的参数个数 $* 传递给脚本或者函数的所有参数 $@ 传递给脚本或者函数的所有参数, $? 上个命令的退出状态,或者函数返回值 $$ 当前SHELL脚本进程 ID 当它们被双引号" "包含时,就会有区别了: "$*"会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。 "$@"仍然将每个参数都看作一份数据,彼此之间是独立的。 函数定义 # 函数定义 # 定义 Shell 函数时不能带参数 # function

linux Shell(待学)

无人久伴 提交于 2019-11-29 05:04:24
2. Shell 2.1 简介 shell脚本执行方式Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务。它类似于 DOS 下的 command 和后来的 cmd.exe。Shell 既是一种命令语言,又是一种程序设计语言。 Shell script 是一种为 shell 编写的脚本程序。Shell 编程一般指 shell脚本编程,不是指开发 shell 自身。 Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。 Linux 的 Shell 种类众多,一个系统可以存在多个 shell,可以通过 cat /etc/shells 命令查看系统中安装的 shell。 Bash 由于易用和免费,在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。 2.2快速入门 1 编写脚本 新建 /root/test/shell/01.sh 文件 #!/bin/bash​echo 'hello world' # !是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。 echo 命令用于向窗口输出文本。 2 解释器 java 需要 虚拟机解释器, 同理 shell脚本也需要 解析器 [root@node04 shells]# cat

shell 强大的awk

匆匆过客 提交于 2019-11-29 04:52:55
from here 小用法,使用awk来对文件随机抽取n行 awk 'BEGIN{srand()} {print rand()"\t"$0}' input_file | sort -nk 1 | head -n line_num | awk -F "\t" '{print $2}' 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。 awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。 使用方法 awk '{pattern + action}' {filenames} 尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action

【shell教程02】Shell 变量、shell字符串、shell数组、shell注释

血红的双手。 提交于 2019-11-29 04:44:29
一、Shell 变量 1、定义变量 定义变量时,变量名不加美元符号($,PHP语言中变量需要),如: your_name="runoob.com" 注意, 变量名和等号之间不能有空格 ,这可能和你熟悉的所有编程语言都不一样。同时,变量名的 命名 须遵循如下 规则 : 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字(可用help命令查看保留关键字)。 有效的 Shell 变量名示例如下: RUNOOB LD_LIBRARY_PATH _var var2 无效的变量命名: ?var=123 user*name=runoob 除了显式地直接赋值,还可以用语句给变量赋值,如: for file in `ls /etc` 或 for file in $(ls /etc) 以上语句将 /etc 下目录的文件名循环出来。 2、使用变量 使用一个定义过的变量,只要在变量名前面加美元符号即可,如: your_name="qinjx" echo $your_name echo ${your_name} 变量名外面的花括号是可选的,加不加都行 ,加花括号是为了帮助解释器识别变量的边界 ,比如下面这种情况: for skill in Ada Coffe Action Java; do echo "I am

shell中的数学运算

柔情痞子 提交于 2019-11-29 00:58:20
expr命令 ======= 最开始,Bourne shell提供了一个特别的命令用来处理数学表达式。expr命令允许在命令行上处理数学表达式,但是特别笨拙: $ expr 1 + 5 6 expr命令能识别一些不同的数字和字符串操作符,如下表: ======================================================================= 操作符 描 述 ----------------------------------------------------------------------- ARG1 | ARG2 如果没有参数是null或0,返回ARG1;否则返回ARG2 ARG1 & ARG2 如果没有参数是null或0,返回ARG1;否则返回0 ARG1 < ARG2 如果ARG1小于ARG2,返回1;否则返回0 ARG1 <= ARG2 如果ARG1小于或等于ARG2,返回1;否则返回0 ARG1 = ARG2 如果ARG1等于ARG2,返回1;否则返回0 ARG1 != ARG2 如果ARG1不等于ARG2,返回1;否则返回0 ARG1 >= ARG2 如果ARG1大于或等于ARG2,返回1;否则返回0 ARG1 > ARG2 如果ARG1大于ARG2,返回1;否则返回0 ARG1 + ARG2

shell三剑客之awk 报告生成器

孤街浪徒 提交于 2019-11-29 00:50:24
shell三剑客 grep 文本搜索工具 全局搜索剪切 sed 流文本编辑器 逐行进行处理 awk 报告生成器 自由的文本格式化工具 支持判断数组循环 awk 报告生成器 显示文件名 以:为分隔符 显示总列数 NF表示列 以:为分隔符 显示总行数 NR表示行 打印第二行 以:为分隔符 显示前三列 以:为分隔符 显示第二行的前三列 以:为分隔符 显示第二行的前三列抓取中间密码占位符x 另一种方式 $2表示第二列 BEGIN{} 读取第一行文本之前执行,一般用来初始化操作 {} 逐行处理,逐行读入文本执行相应的处理,是最常见的编辑指令块 END{} 处理完最后一行文本之后执行,一般用来输出处理结果 以 : 分隔列从 NAME 为第1行开始依次输出多少行 END 为结束行 以 : 分隔列从 NAME 为第1行开始依次输出第1列 END 为结束行 以 : 分隔列从 NAME 为第1行开始依次输出第1列和第7列 END 为结束行 以 : 分隔列从 NAME 为第1行开始依次输出全部内容 END 为结束行 以 : 分隔列从 NAME 为第1行开始依次输出第1列为空显示全部内容 END 为结束行 以 : 分隔列从 NAME 为第1行开始依次输出全部内容 加上分隔符:END 为结束行 显示以bash结尾的行 显示非bash结尾的行 显示非bash结尾或nologin内容的行 显示以r开头的行

MongoDB中的数据类型

空扰寡人 提交于 2019-11-29 00:30:25
MongoDB支持多种数据类型作为文档中的值。 基本数据类型 MongoDB的文档类似于JSON,在概念上和JavaScript中对象神似。JSON是一种简单的表示数据的方式,仅包含6种数据类型。这带来很多好处:易于理解、易于解析、易于记忆。但另外一方面,JSON的表现力也有限制,因为只有 null、布尔、数字、字符串、数组和对象几种类型。 虽然这些类型的表现已经足够强大,但是对于绝大多数应用来说还需要另外一些不可或缺的类型,尤其是与数据库打交道的那些应用。例如,JSON没有日期类型,这会使得出来本来简单的日期问题变得非常繁琐。只有一种数字类型,没法区分浮点数和整数,更不能区分32位和64位数字。也没有办法表示其他常用类型,如正则表达式或函数。 MongoDB在保留JSON基本的键/值对特性的基础上,添加了其他一些数据类型。 下面列出了MongoDB通常支持的一些类型,同时说明了在shell中这些类型是如何表示为文档的一部分的。 - null 用于表示空值或者不存在的字段。 - 布尔 布尔类型有两个值true和false。 32位整数 shell中这个类型不可用。前面提到,JavaScript仅支持64位浮点数,所以32位整数会被自动转换。 - 64位整数 shell也不支持这个类型。shell会使用一个特殊的内嵌文档来显示64位整数。 - 64位浮点数

linux shell 脚本攻略 下

江枫思渺然 提交于 2019-11-28 21:22:02
sed 入门 sed可以替换给定文本中的字符串,当然也可以用正则表试试匹配 sed 's/pattern/replace_string/' file 或者 cat file | sed 's/pattern/replace_string' 使用-i选项,可以讲替换结果应用于原文件 sed -i 's/text/replace/' file 如果要替换所有的的内容,需要在末尾增加g sed -i 's/pattern/replace/g' file 也可以使用1g 2g 来从第n+1处开始替换 移除空白行 sed '/^$/d' file 其中 ^$ 为行首和行尾 空白行中 行首和行尾是一起的 双引号用来匹配变量 sed "s/$text/Hello" 如果有特殊字符可以使用 sed -i "s#$test#hello#g" awk 通用语法 awk ' BEGIN { print "start" } pattern { commands } END { print "end" } file awk脚本通常由3个部分组成,BENGIN语句块,END语句块,和能够使用模式匹配的通用语句块 awk " BEGIN { statements } {statements} END {end statements }" 例如 awk " BEGIN { i=0 } { i++ } END {

shell数组(四)

杀马特。学长 韩版系。学妹 提交于 2019-11-28 19:27:26
[root@ipha-dev71-1 exercise_shell]# cat test.sh #!/bin/bash my_array=(a b c d) echo "第一个元素为:${my_array[0]}" echo "第二个元素为:${my_array[1]}" echo "第三个元素为:${my_array[2]}" echo "第四个元素为:${my_array[3]}" echo "数组的元素为:${my_array[*]}" echo "数组的元素为:${my_array[@]}" echo "数组元素个数为:${#my_array[*]}" echo "数组元素个数为:${#my_array[@]}" [root@ipha-dev71-1 exercise_shell]# ./test.sh 第一个元素为:a 第二个元素为:b 第三个元素为:c 第四个元素为:d 数组的元素为:a b c d 数组的元素为:a b c d 数组元素个数为:4 数组元素个数为:4 来源: https://www.cnblogs.com/wang-mengmeng/p/11422877.html

shell脚本进阶之数组基础

怎甘沉沦 提交于 2019-11-28 18:05:42
SHELL脚本--shell数组基础 ​ 数组和变量的区别:变量在内存中占用的空间是离散的,数组在内粗中开辟一段连续的大内存空间,随后数组中的每个元素都放入数组内存中。数组元素使用index标识。 ​ bash里有两种数组普通数组和关联数组。普通数组只能使用整数类形数值作为数组索引,关联数组可以使用字符串作为索引。关联数组的另外三种称呼:字典(dict),hash结构和映射(map),是一种key和value一一对应的关系。 一、普通数组 1.1定义普通数组 方法一: [root@linux1 ~]# age=(18 22 36 28) [root@linux1 ~]# echo ${age[3]} 28 方法二:自定义索引位 [root@linux1 ~]# age[5]=15 [root@linux1 ~]# age[6]=76 1.2打印数组所有值 [root@linux1 ~]# echo ${age[*]} 18 22 36 28 15 76 [root@linux1 ~]# echo ${age[@]} 18 22 36 28 15 76 1.3查看数组索引号 [root@linux1 ~]# echo ${!age[@]} 0 1 2 3 5 6 1.4统计数组中元素的个数(只统计值不为空的元素) [root@linux1 ~]# echo ${#age[@]} 6