shell数组

shell-【技术干货】工作中编写shell脚本实践

和自甴很熟 提交于 2019-11-28 14:28:37
在公司项目的开发过程中,需要编写shell脚本去处理一个业务,在编写过程中发现自身对shell脚本的知识不够完善,顾整理一下,本文章主要内容来自 菜鸟教程 , 也添加了一些知识点 看完这边文章应该就可以独立完成大部分脚本得编写 shell脚本? 在说什么是shell脚本之前,先说说什么是shell。 shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包括ls、cd、pwd等等。总结来说,Shell是一个命令解释器,它通过接受用户输入的Shell命令来启动、暂停、停止程序的运行或对计算机进行控制。 shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。 shell 本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序。 那么什么是shell脚本呢? shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。 shell脚本中最重要的就是对shell命令的使用与组合,再使用shell脚本支持的一些语言特性,完成想要的功能。 注释 “# ”开头的就是注释,被编译器忽略 单行注释: # 多行注释: :<

SHELL脚本--shell数组基础

本秂侑毒 提交于 2019-11-28 13:25:58
bash&shell系列文章: http://www.cnblogs.com/f-ck-need-u/p/7048359.html 数组和变量的区别是:变量在内存中占用的空间是离散的,数组在内存中是先开辟一段连续的大内存空间,随后数组中的每个元素都放入数组内存中。数组元素使用数组index标识。 bash里有两种数组:普通数组和关联数组。普通数组只能使用整型数值作为数组索引,关联数组可以使用字符串作为索引。所谓的关联数组,它的另外三种称呼:字典(dict)、hash结构和映射(map),是一种key和value一 一对应的关系。 1.9.1 普通数组 定义数组的方式一: [root@xuexi tmp]# array_test=(1 2 3 4) 它们分别存储在索引位0-3的位置上,是array_test[0]到array_test[3]对应的值。此时array_test[0]表示的是一个变量,所以使用$来引用。数组的引用方式:${array_name[index]}。 [root@xuexi tmp]# echo ${array_test[2]} 3 注意数组中定义是使用空格作为分隔符定义在括号内,而不是逗号。如果使用逗号,则它们将作为一个整体,也就是数组索引0的值。如果使用逗号,则: [root@xuexi tmp]# array_test=(1,2,3,4) [root

shell脚本编程高级篇

喜夏-厌秋 提交于 2019-11-28 13:05:11
SHELL脚本编程进阶 循环执行:简单来说就是把一些指令重复循环。 循环代码具体的指令有三种: for , while , until其中for, while用的最多。 for循环 for 变量名 in 列表;do 循环体 done 关键字的帮助都是用help来查询。 for循环语法:在shell编程中 for,in,do,done。这些都是他的关键字,其中循环的指零就放在do和done之间。 WORDS决定了循环次数。 循环的次数由in 后面跟的WORDS(字符串)的数量决定。字符串的个数决定了do和done之间的指令执行的次数。 $ :for认为是一个整体 br/>$@:for认为是独立的参数 for循环逻辑:↓↓ :这条命令意思是,将i变量为1 22 33 等于说i同时等于这3个变量然后用到$i把变量显示出来第一次i就是1第二次i就是22第三次i就是333这就是for循环的逻辑。 :还可以使用花括号或字母一次性显示完。 for脚本编辑语法:,脚本意思是i变量为arg而$@是独立的一个整体执行为脚本后面跟123代表arg is 独立的123。 :这是重复创建10次用户的意思i变量为{1..10}这个范围 :这是让FILE变量为userlist.txt这个文件然后执行这个文件里有多少用户,在来循环多少次。 :不用创建脚本也可以在外执行for结尾必须使用;隔开done

shell - 函数和数组

无人久伴 提交于 2019-11-28 10:53:28
函数 # 函数定义的方式 函数名(){ # 注意这里有空格 commands } function 函数名{ commands } # 使用$1, $2, $3方式传参 func(){ echo "hello $1"} # 调用 func lily func2(){ echo "hello $*"} # 传多个参数 func2 lili clerk mephy # 注意函数传参和脚本传参不一样 num=$1 # 就需要外部传参 # 函数的返回值 return 只能返回 1-255的整数 echo 返回字符串 return 1 # $? 结果为1 数组 数组可以存多个值,根据下标输出值 tt=(aa bb cc dd ) echo ${tt} # 输出第一个 echo ${tt[@]} ${tt[*]} # 都是输出全部 echo ${!tt[*]} # 输出下标 # 普通数组 VS 关联数组 普通数组 tt=(linux windows shell) # 下标只能是整数 关联数组 info=([name]=clerk [age]=18 [gender]=female ) 取值: info[name] # 定义关联数组 declare -A info info=([name]=clerk [age]=18 [gender]=female ) # 取值 echo ${info[age]

shell笔记_数组与字符串

烈酒焚心 提交于 2019-11-28 08:02:36
回顾: 函数:写一个代码块,用来重复调用的; 1、函数的写法格式 2、参数,在函数名后面直接加,即可;如果在外面 abc(){ 函数体 $@ } abc 1 2 3 4 5 :wq a.sh 1 2 3 4 5 6 3、变量 local本地变量 local i=1 如果在函数体外同样也定义了一个相同的变量 扩展:source / bash / chmod+x 全路径 【父子进程的问题】 4、return 结束函数体的执行 和exit 的却别 return 和 exit 都指定的返回值 0 代表执行成功,1-255 代表执行失败 return只用在函数体中; 5、迭代 迭代的时候一定要指初始值!!! n! n!=n(n-1)! fact(){ if [ $1 -lt 1 -o $1 -eq 0 ];then echo 1 else echo "$[$1*$(fact $[$1-1])]" fi } fact 100 1 2 3 4 5 6 7 8 1 1 2 3 5 8 13 21 34 ... 斐波那锲数列 F(n)=F(n-1)+F(n-2) fab(){ if [ $1 -eq 1 ];then echo 1 elif [ $1 -eq 2 ];then echo 1 else echo "$[$(fab $[$1-1])+$(fab $[$1-2])]" fi } fab

shell脚本8-20

坚强是说给别人听的谎言 提交于 2019-11-28 07:11:55
数组 1、数组说白了就是一段连续的变量,一段连续的内存存储空间,用来解决变量过多的问题; 在同一类变量中,我们不需要去定义多个名字,而是以数组的方式来定义;(列表) 2、数组的写法:数组名[索引]=值 3、数组赋值: (1)在计算机语言中,索引一般从0开始计算,索引并不一定是数字也可以是key-value(键值对),如:array[小明]=1.87m (2)array=(/var/log/*.log),可以用来做遍历 (3)直接赋值:array=(a b c d e) (4)通过键值赋值:array=(‘小明=187’ ‘张三=185’ ‘李四’=176) (5)通过read命令赋值:read -t 延迟时间 -p “指定说明” -a 输入数组所需的变量值 例: read -a a b c d e 4、调用数组:普通变量:${变量名}        ${数组名[索引]}【定义的是哪个索引,就看到是对应索引指定的值】        ${数组名}【默认调用索引等于0的值】        ${数组名[*]}或者${数组名[@]}(调用数组内所有的值,建议使用@) 练习:统计/var/log/*.log中,索引为偶数的文件的行数的和 a=(/var/log/*.log) for i in {0..7};do if [ $[$i%2] -eq 0 ];then line=`wc -l ${a

shell 求数组的平均值,求和,最大值,最小值

我是研究僧i 提交于 2019-11-28 06:41:09
test.sh #!/bin/bash arr=(1 7 3 10 8 5 4 9 6 2) let min=${arr[0]} let max=${min} sum=0 for (( i=0;i<${#arr[*]};i++)) do [[ ${min} -gt ${arr[$i]} ]] && min=${arr[$i]} [[ ${max} -lt ${arr[$i]} ]] && max=${arr[$i]} let sum=sum+${arr[$i]} done echo "最小值:$min" echo "最大值:$max" echo "求和:$sum" total=${#arr[*]} echo -e "平均值:\c" echo "$sum/$total" | bc 输出 bogon:Desktop macname$ ./test.sh 最小值:1 最大值:10 求和:55 平均值:5 来源: https://www.cnblogs.com/sea-stream/p/11397651.html

Shell:Day09-2.笔记

删除回忆录丶 提交于 2019-11-28 06:15:38
4、模式匹配(地址定界) 1、空值,没有定义,默认就将文件中所有的行,放入awk进行循环 2、对固定的 1,3 行进行操作 sed -n '1,3p' /etc/passwd awk '1,3{print}' /etc/passwd //awk默认不支持使用 1-3 1,3 等等,这样数值的直接写法; awk 'NR>=1&&NR<=3{print}' /etc/passwd //通过NR变量来指定 3、/pat1/ sed -n /pat1/p /etc/passwd awk '/r..ter/{print}' /etc/passwd 4、/pat1/,/pat2/ 第一次匹配pat1到第一次匹配pat2,之间的行 练习:判断/^r..ter/,/^user.*\>/之间的行的用户,是bash的用户,并显示用户的用户名,和UID ======================================== ?shell: for i in `awk '/^r..ter/,/^user.*\>/{print $NF}' /etc/passwd`;do if [[ $i == "/bin/bash" ]];then echo `` fi done while line;do if [[ "/bin/bash" == `awk -F: '{print $NF}' $line` ]]

Shell:Day09.笔记

只愿长相守 提交于 2019-11-28 03:50:41
awk 【单独的编程语言解释器】 1、awk介绍 全称:Aho Weinberger Kernaighan 三个人的首字母缩写; 1970年第一次出现在Unix机器上,后来在开源领域使用它; 所以,我们在Linux中使用,改名为GNU awk;所以,在Linux上实际上叫做gawk; grep 行过滤器 -o -i -v -E grep egrep fgrep【写什么就匹配什么】 sed 行编辑器 -n p 1、地址定界 3,5,/pat/【e】 2、命令 p a \ i \ w c \ s/pat/str/g|1|2..|& ${var/pat/str} ${var//pat/str} ${test}、${#test}、${test:offset:length}、${test#*word}、${test##*word}、${test%word}、${test%%*word}、${test/pattern/string}、${test//pattern/string}、${test:-word} awk 报告生成器 通过模式匹配以及自己本身的语言格式,来获取、并输出客户所需要的内容; 【默认情况下,三个工具都不去编辑源文件】 示例:获取系统上面用户id大于等于1小于等于500的用户的用户名和用户ID for i in $(cut -d: -f3 /etc/passwd);do if

shell数组与字符串

我的未来我决定 提交于 2019-11-28 02:57:18
数组   数组说白了就是一段连续的变量,一段连续的内存存储空间   解决变量过多的问题,在同一类变量中,我们不需要去定义多个名字,而是以数组的方式来定义   如何去定义数组:     declare -i 定义整数     declare -a 定义数组     declare -A 定义嵌套的数组【不常用】   [python 和 shell]   array=(值)   空数组:array=()   给数组赋值:    1.array[0]=1     (在计算机语言中,索引一般从0开始计算)     (索引不一定是数字:key-value Array[崔广炘] = 1.73m)     (sehll中数组可以跳跃赋值)    2.array=(/var/log/*.log)     做遍历     array=(a b c d)    3.array=('a=187' 'b=189')    4.通过read命令来赋值     read -t 延迟 -p “说明” -a 输入所需的变量值     read -a a b c d   如何调用数组:     ${变量名}     ${数组名[索引]}定义的是那个索引,就看到的是那个索引对应的值     ${数组名}默认调用,索引=0的值     ${数组名[*]}调用数组内所有的值 统计/var/log/*