shell数组

shell编程基础

不羁岁月 提交于 2020-01-29 04:30:00
1.1 命名规则 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字(可用help命令查看保留关键字)。 1.2 使用变量 使用一个定义过的变量,只要在变量名前面加美元符号($)即可 加花括号是为了帮助解释器识别变量的边界,推荐给所有变量加上花括号,这是个好的编程习惯 已定义的变量,可以被重新定义 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变 使用 unset 命令可以删除变量, 不能删除只读变量 1.3 变量类型 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。 shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行 1.4 Shell字符串 字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似 字符串的拼接 获取字符串长度 echo

模块二、shell脚本逻辑结构

核能气质少年 提交于 2020-01-29 01:19:23
七、if结构条件句知识与实践 (一)if条件句单双分支语法 1、单分支 if 条件 then 指令 fi 2、双分支 if 条件 then 指令 else 指令集2 fi (二)if条件句多分支语句 if 条件1 then 指令1 elif 条件2 then 指令2 elif 条件3 then 指令3 else 指令4 fi 实例: 如果不存在目录/backup,则创建。 [root@centos6-kvm3 scripts]# cat 07-01.sh #!/bin/bash path="/backup" [ -d $path ] || mkdir $path -p if [ -d $path ] then : else mkdir $path -p fi if [ !-d $path] then mkdir $path -p fi [root@centos6-kvm3 scripts]# 开发shell脚本判断内存是否充足,如果小于100,提示不足,如果大于100提示充足。 [root@centos6-kvm3 scripts]# cat 07-02.sh #!/bin/bash mem=`free -m | awk 'NR==3{print $NF}'` if [ $mem -lt 100 ] then echo "内存不充足!" else echo "内存充足!" fi

Linux Shell常用技巧(五)

不打扰是莪最后的温柔 提交于 2020-01-28 19:25:40
十一. awk编程: 1. 变量: 在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义。变量的类型可以是数字、字符串。根据使用的不同,未初始化变量的值为0或空白字符串" ",这主要取决于变量应用的上下文。下面为变量的赋值负号列表: 符号 含义 等价形式 = a = 5 a = 5 += a = a + 5 a += 5 -= a = a - 5 a -= 5 *= a = a * 5 a *= 5 /= a = a / 5 a /= 5 %= a = a % 5 a %= 5 ^= a = a ^ 5 a ^= 5 /> awk '$1 ~ /Tom/ {Wage = $2 * $3; print Wage}' filename 该命令将从文件中读取,并查找第一个域字段匹配Tom的记录,再将其第二和第三个字段的乘积赋值给自定义的Wage变量,最后通过print命令将该变量打印输出。 /> awk ' {$5 = 1000 * $3 / $2; print}' filename 在上面的命令中,如果$5不存在,awk将计算表达式1000 * $3 / $2的值,并将其赋值给$5。如果第五个域存在,则用表达式覆盖$5原来的值。 我们同样也可以在命令行中定义自定义的变量,用法如下: /> awk -F: -f awkscript month=4 year=2011

Linux Shell常用技巧(五)

ⅰ亾dé卋堺 提交于 2020-01-28 04:53:15
十一. awk编程: 1. 变量: 在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义。变量的类型可以是数字、字符串。根据使用的不同,未初始化变量的值为0或空白字符串" ",这主要取决于变量应用的上下文。下面为变量的赋值负号列表: 符号 含义 等价形式 = a = 5 a = 5 += a = a + 5 a += 5 -= a = a - 5 a -= 5 *= a = a * 5 a *= 5 /= a = a / 5 a /= 5 %= a = a % 5 a %= 5 ^= a = a ^ 5 a ^= 5 /> awk '$1 ~ /Tom/ {Wage = $2 * $3; print Wage}' filename 该命令将从文件中读取,并查找第一个域字段匹配Tom的记录,再将其第二和第三个字段的乘积赋值给自定义的Wage变量,最后通过print命令将该变量打印输出。 /> awk ' {$5 = 1000 * $3 / $2; print}' filename 在上面的命令中,如果$5不存在,awk将计算表达式1000 * $3 / $2的值,并将其赋值给$5。如果第五个域存在,则用表达式覆盖$5原来的值。 我们同样也可以在命令行中定义自定义的变量,用法如下: /> awk -F: -f awkscript month=4 year=2011

shell脚本-编程原理

北城以北 提交于 2020-01-26 04:23:47
1、 shell脚本语言介绍 优点:调用os(操作系统)的命令行,来实现所有功能 缺点:没有库调用(区分python) 变量:全局变量、局部变量、本地变量、传参   /etc/shells/ --查看当前系统支持的shell程序   echo $SHELL -- 查看当前会话的shell程序   /etc/passwd -- 制定了用户默认支持的shell程序 shell的执行: 1)bash命令来执行脚本 -n 查看shell脚本的逻辑错误(单词查不出) -x 逐行显示执行的脚本程序(方便排错) 2)授权 chmod +x filename.sh 使用全路径执行脚本,即可./filename.sh 2、变量 环境变量($HOME、$SHELL、) 局部变量 declare命令 -- 定义变量类型 本地变量 local在函数中使用 变量类型: 数值型:int 整型、浮点型(float)、布尔值(true/false) 字符串: 1)普通字符及字符串 2)数组 编程语言的分类: 强类型语言 -- 数值必须被定义,才能进行处理或运算 弱类型语言 -- 编程语言可以自动识别变量类型 【多态--一个数据具有多个属性,而最后使用的属性取决于和他进行运算事物数据】 传参 $? ---上一条命令执行状态(0 正确 1-255错误) $1 $2 .. ${10} --- 命令后面传入脚本的数据

shell脚本day03-编程原理

隐身守侯 提交于 2020-01-23 21:35:09
一、编程介绍   (计算机只能识别二进制指令)   早期编程:驱动和硬件默认不能使用,但不同厂家设备之间需要进行指令沟通,我们需要驱动来进行翻译;更趋紧与硬件开发的工程师,要学习汇编语言,而汇编语言被厂家所限制。C,C++的底层就是汇编语言 现在编程基于高级语言,以及超高级语言,更好的让程序员能够实现汇报功能。高级语言、超高级语言需要翻译成计算机可读的语言(二进制指令) 汇编语言的分类 解释型---逐行解释,逐行执行 shell python java 编译型---一次编译,全部行 C C++ C# java 面向对象---侧重于数据的编程语言 面向过程---侧重于指令 编程语言的执行方式:       【按行执行】 顺序执行 循环执行---for(遍历) while(循环条件) until(和while相反) 选择执行---分支 if case 二、shell脚本语言介绍   shell语句是面向过程的,侧重于指令集。     优点:调用os(操作系统)的命令行,来实现所有功能;   缺点:没有库调用(区别于python)   shell语句的基本组成成分: 命令(重点!) 变量(全局变量、局部变量、本地变量) 逻辑关系 数据-变量(转参)   shell没有内嵌函数,没有函数库调用,没有调用库的接口 三、shell的第一句话(重要)    #!/bin/bash /

shell基础之变量及表达式

柔情痞子 提交于 2020-01-22 01:49:32
本节内容 1. shell 变量简介 2. 定义变量 3. 使用变量 4. 修改变量的值 5. 单引号和双引号的区别 6. 将命令的结果赋值给变量 7. 删除变量 8. 变量类型 9. 特殊变量列表 10. 退出状态 11. shell 表达式与运算符 11.1 条件表达式 11.2 整数比较符 11.3 字符串比较符 11.4 文件测试 11.5 布尔运算符 11.6 逻辑判断符 11.7 整数运算 11.8 其他运算工具 11.9 shell 括号用途总结 一、 shell 变量简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以, Shell 变量也遵循这个规则。 在 Bash shell 中,每一个变量的值都是字符串, 无论你给变量赋值时有没有使用引号,值都会以 字符串 的形式存储 。这意味着, Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。 二、定义变量 Shell 支持以下三种定义变量的方式: variable= value variable= 'value' variable= "value" variable 是变量名, value 是赋给变量的值。如果 value 不包含任何空白符(例如空格、 Tab

SHELL篇 转置文件

一笑奈何 提交于 2020-01-20 01:10:47
题目: 给定一个文件 file.txt,转置它的内容。 你可以假设每行列数相同,并且每个字段由 ' ' 分隔。 示例: 假设 file.txt 文件内容如下: name age alice 21 ryan 30 应当输出: name alice ryan age 21 30 解题方法一: #/bin/bash awk '{ # NF表示列数,NR表示当前行数 for (i=1; i<=NF; i++){ if(NR==1){ # 处理第一行时,将第i列的值($i)存入arr[i],i为数组的下标,数组不用定义可以直接使用 arr[i]=$i; } else{ # 不是第一行时,将该行对应i列的值拼接到arr[i] arr[i]=arr[i] " " $i } } } END{ # 每行处理完以后,输出数组 for (i=1; i<=NF; i++){ print arr[i] } }' file.txt 执行耗时12ms,内存占用3.5M 解题方法二: #!/bin/bash fields=`awk 'END{print NF}' file.txt` # 获取列数,列数代表文件转置后的行数 for i in $(seq 1 ${fields}) do awk -v i=$i -v ORS=' ' '{print $i}' file.txt | sed 's/[ ]*$//' #

shell基础使用

社会主义新天地 提交于 2020-01-18 12:31:15
2、shell 2.1、shell基础正则表达式 ​ 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。并规定一些特殊语法表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式,这就是正则表达式( Regular Expression ) 。 2.1.1、普通元字符 字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“ n ”匹配字符“ n ”。“ \n ”匹配一个换行符。串行“ \\ ”匹配“ \ ”而“ \( ”则匹配“ ( ”。 ^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“ \n ”或“ \r ”之后的位置。 $ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“ \n ”或“ \r ”之前的位置。 * 匹配前面的子表达式零次或多次。例如,zo 能匹配“ z ”以及“ zoo ”。 等价于{0,}。 + 匹配前面的子表达式一次或多次。例如,“ zo+ ”能匹配“ zo ”以及“ zoo ”,但不能匹配“ z ”。+等价于{1,}。 ? 匹配前面的子表达式零次或一次。例如,“ do(es)?

shell数组

笑着哭i 提交于 2020-01-16 20:59:12
shell只支持一维数组 【语法格式】 arr_name=(value1 value2 ··· valuen) 数组下标从0开始; 数组内的元素类型可以不同; 初始化时不需要定义数组大小。 操作目的 语法格式 备注 读取数组部分元 ${arr_name[index]} 读取数组所有元素 ${arr_name[*]} ${arr_name[@]} *按空格读取; @按元素读取 数组的截取 ${arr_name[@]:a:n} 从下标a开始(包含a),长度为n的数组 获取数组长度 ${#arr_name[*]} ${#arr_name[@]} 操作目的 语法格式 备注 增加元素 arr_name(add_value1 "${arr_name[@]}" add_value2) 删除元素 unset arr_name[index] 来源: CSDN 作者: 芬达爱吃糖 链接: https://blog.csdn.net/zy1206_c/article/details/104006045