shell数组

shell中各种括号()、(())、[]、[[]]、{}的作用

北慕城南 提交于 2020-01-15 17:21:05
技巧小结: 字符串比较用双中括号[[ ]];算数比较用单中括号[ ]——左右留空格 算数运算用双小括号(( )) ;shell命令及输出用小括号( )——左右不留空格 快速替换用花括号{ }——左右留空格 反单引号起着命令替换的作用 单括号(): 另开命令组——小括号中的内容会开启一个子shell独立运行;括号中以分号连接,最后一个命令不需要;各命令和括号无空格 得到命令输出——a=$(command), 等同于a=$ command ,得到命令输出传递给变量a 初始化数组——array=(a b c d) 双括号(()): 省去$符号的算术运算—— for((i=0;i<5;i++)); if (($i<5)); a=5; ((a++)) 可将 $a 重定义为6;括号内支持多个表达式用逗号分开。 C语言规则运算——$((exp)),exp为符合C语言规则的运算符,表达式 跨进制运算——二进制、八进制、十六进制运算时,输出结果全都自动转化成了十进制。如:echo $((16#5f)) 结果为95 (16进位转十进制) 单中括号[ ]: 字符串比较——==和!= 整数比较——不等于:-gt:大于;-lt :小于;-eq:等于;-ne 数组索引——array[0] 双中括号[[]]: 字符串比较——可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell?

SHELL脚本-第五课

☆樱花仙子☆ 提交于 2020-01-12 15:10:49
SHELL脚本-第五课 回顾 访问变量 内部变量 参考资料 回顾 区分了单引号和双引号的区别; 了解了更多的转义字符; 退出时的状态。 访问变量 变量使用得当,可以使脚本变得更加强大和有弹性。 内部变量 $BASH :Bash二进制程序文件的路径; $BASH_ENV :该环境变量保存一个Bash启动文件路径,当启动一个脚本程序时会去读该环境变量指定的文件; $BASH_SUBSHELL :一个指示子shell(subshell)等级的变量; $BASH_VERSINFO[n] :这个数组含有6个元素,指示了安装的Bash版本的信息。它和$BASH_VERSION相似,但它们还是有一些小小的不同; #!/bin/bash for n in 0 1 2 3 4 5 do echo "BASH_VERSINFO[ $n ] = ${BASH_VERSINFO[$n]} " done exit 0 运行结果如下: $ ./5-2-BashVersifo.sh BASH_VERSINFO[0] = 3 # 主版本号. BASH_VERSINFO[1] = 2 # 次版本号. BASH_VERSINFO[2] = 57 # 补丁级. BASH_VERSINFO[3] = 1 # 编译版本. BASH_VERSINFO[4] = release # 发行状态. BASH_VERSINFO[5]

mongoDB的shell数组操作器

青春壹個敷衍的年華 提交于 2020-01-11 20:58:55
http://www.2cto.com/database/201304/205024.html mongoDB数组操作器 $push会向数组末尾加入一个元素,如果数组不存在,则会创建这个数组。 增加评论comments: db.blog.posts.update({"title":"a blog post"} ,{ $push: {"comments":{"name":"joe","email":"joe@example.com"}} } ) 最终的结果是: { "_id":ObjectId("8df8df78d7f7d8df7"), "title":"a blog post" "comments":[{ "name":"joe", "email":"joe@example.com" }] } $ne如果一个值不在数组里面,就加进去: db.papers.update({"authors cited":{"$ne":"richie"}}, {$push:{"authors cited":"richie"}}) 也可以用$addToSet完成同样的功能: db.papers.update({"_id":ObjectId("sdf9sd7f67df89d")}, {"$addToSet":{"authors cited":"richie"}}) $addToSet和$each组合起来

【转载】shell基础知识

a 夏天 提交于 2020-01-11 18:33:03
变量的定义: a=1 b=hello c="hello world !" d='hello "反启" !' e=`ls` (注意:这是反引号)   备注:=号左右不能有空格;如果内容有空格需要使用单引号或者双引号;双引号支持转译 $开头的变量会被自动替换 变量替换:   ${value:-word}:如果变量名存在且非null,返回变量值;否则,返回word字符串   用途:如果变量未定义,则返回默认值   ${value:=word}:如果变量名存在且非null,返回变量值;否则,设置这个变量值为word   用途:如果变量未定义,,则设置变量为默认值,并返回默认值   ${value:?"not defined"}:如果变量名存在且非null,返回变量值;否则显示“not defined”,并退出当前命令或脚本。   用途:用于捕捉由于变量未定义而导致的错误,并退出程序。   ${value:+word}:如果变量名存在且非null,返回word,否则返回null。   用途:测试变量是否存在。 变量的使用:   echo $a   echo ${a}   echo "$a"   备注:使用$var 或 ${var}来访问变量,后者更为严谨,$var_x和${var}_x是不同的;变量不需要定义也可以使用,引用未定义的变量,默认为空值。 预定义变量: echo $USER

shell中$*和$@ 两个都区别

蹲街弑〆低调 提交于 2020-01-08 11:39:49
$* 与 $@ 区别: 相同点:都是引用所有参数。 不同点:只有在 双引号 中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数) 例: #!/bin/bash for i in "$*" do echo $i done for i in "$@" do echo "aa$i" done 输出 1 2 3 4 aa1 aa2 aa3 aa4 例: #!/bin/bash for i in $* do echo $i done for i in $@ do echo "aa$i" done 输出 1 2 3 4 aa1 aa2 aa3 aa4 其他: 读取数组 读取数组元素值的一般格式是: ${array_name[index]} 实例 #!/bin/bash my_array=(A B "C" D) echo "第一个元素为: ${my_array[0]}" echo "第二个元素为: ${my_array[1]}" echo "第三个元素为: ${my_array[2]}" echo "第四个元素为: ${my_array[3]}" 执行脚本,输出结果如下所示: $ chmod +x test.sh $ ./test.sh 第一个元素为: A 第二个元素为: B

shell变量详解

最后都变了- 提交于 2020-01-07 20:06:37
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> shell变量详解 1 shell变量基础 shell变量是一种很“弱”的变量,默认情况下,一个变量保存一个串,shell不关心这个串是什么含义。所以若要进行数学运算,必须使用一些命令例如let、declare、expr、双括号等。shell变量可分为两类:局部变量和环境变量。局部变量只在创建它们的shell中可用。而环境变量则可以在创建它们的shell及其派生出来的任意子进程中使用。有些变量是用户创建的,其他的则是专用shell变量。变量名必须以字母或下划线字符开头。其余的字符可以是字母、数字(0~9)或下划线字符。任何其他的字符都标志着变量名的终止。名字是大小写敏感的。给变量赋值时,等号周围不能有任何空白符。为了给变量赋空值,可以在等号后跟一个换行符。用set命令可以查看所有的变量,unset var命令可以清除变量var,var相当于没有定义过。readonly var可以把var变为只读变量,定义之后不能对var进行任何更改。对shell变量的引用方式很多,用这些方式可以方便的获取shell变量的值,变量值的长度,变量的一个字串,变量被部分替换后的值等等。shell变量常见引用方式如下: 2 环境变量 环境变量的定义方法如下: var=value export var

Shell 参数扩展及各类括号在 Shell 编程中的应用

本秂侑毒 提交于 2020-01-07 09:30:17
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 今天看有人总结了 shell 下的参数扩展,但不是很全,恰好以前整理过放在百度空间,但百度空间目前半死不活的情况下对 Google 非常不友好,索性一并转过来方便查阅。 1、bash 中的 大括号参数扩展 (Parameter Expansion) 假设我们定义了一个变量为: file=/dir1/dir2/dir3/my.file.txt 1.1 bash 下的 split 取“数组”的首、尾: ${file#*/}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}:拿掉最后一条 / 及其左边的字符串:my.file.txt ${file#*.}:拿掉第一个 . 及其左边的字符串:file.txt ${file##*.}:拿掉最后一个 . 及其左边的字符串:txt ${file%/*}:拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3 ${file%%/*}:拿掉第一条 / 及其右边的字符串:(空值) ${file%.*}:拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file ${file%%.*}:拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my Tips: 记忆的方法为: #

Shell脚本入门-2

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

Shell脚本入门-5

一笑奈何 提交于 2020-01-07 07:49:17
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。 与大部分编程语言类似,数组元素的下标由0开始。 Shell 数组用括号 来表示, 元素用"空格"符号分割开 ,语法格式如下: array_name=(value1 ... valuen) 实例 #!/bin/bash # author:ethan my_array=(A B "C" D) 我们也可以使用下标来定义数组: array_name[0]=value0 array_name[1]=value1 array_name[2]=value2 读取数组 读取数组元素值的一般格式是: ${array_name[index]} 实例 #!/bin/bash # author:ethan my_array=(A B "C" D) echo "第一个元素为: ${my_array[0]}" echo "第二个元素为: ${my_array[1]}" echo "第三个元素为: ${my_array[2]}" echo "第四个元素为: ${my_array[3]}" 执行脚本,输出结果如下所示: $ chmod +x test.sh $ ./test.sh 第一个元素为: A 第二个元素为:

shell实现简单的数组排序

拈花ヽ惹草 提交于 2020-01-01 16:19:16
c++代码 int nums[8]={1,2,1,3,4,2,5,6}; int length=8; for(int i=0;i<length;i++){ for(int j=i+1;j<length;j++){ if(nums[j]<nums[i]){ int t=nums[j]; nums[j]=nums[i]; nums[i]=t; } } } for(int i=0;i<length;i++){ cout<<nums[i]<<" "; } shell代码 i=0 #外层循环计数 j=0+$i #内层循环计数 t=0 #用于两数字交换临时变量 nums=(1 2 1 3 4 2 5 6) # 用于测试的数组 length=${#nums[*]} # 数组长度 # 外层循环开始 while [ $i -lt $length ] do # 内层循环开始 j=$(($i + 1)) while [ $j -lt $length ] do # 从小到大排序 if [ ${nums[$j]} -lt ${nums[$i]} ] then t=${nums[$i]} nums[$i]=${nums[$j]} nums[$j]=$t fi # j++ j=$(($j + 1)) done # i++ i=$(($i + 1)) done # 输出结果 i=0 while [ $i -lt