SHELL编程中,当要引用到多个值的时候,一个一个地进行变量赋值会让我们的脚本变得繁琐,不利于代码的优化,所以,就需要通过数组进行定义,优化代码,减少不必要的定义和命令操作。
SHELL中的数组:存储多个元素的连续内存空间
数组名:整个属组只有一个名字
数组索引: 编号从0开始
数组名[索引]
${array_name[index]}
注:bash-4及之后的版本,支持自定义索引,而不仅仅是0,1,2,3.。。数字格式
此类属组称之为”关联数组”
声明数组:
Declare -a 声明一个索引数组
-A 声明一个关联数组
数组中元素赋值方式
1.一次只赋值一个元素
Array_name[index]=value
直接引用数组名,显示第一个元素
2. 一次赋值全部元素
Array_name=(“val1” “val2” “val3” …)
3.只赋值特定元素
Array_name=([1]=”val1” [3]=”val2” …)
稀疏格式的属组
4. read –a array
引用数组中的元素:${array_name[index]}
引用时,只给数组名,表示引用下标为0的元素
${array_name[*]/[@]}引用数组中的所有元素
数组长度(数组中元素个数)
${#array_name}
${#array_name[*]/[@]}
$(#array_name)不加[]表示显示属组中第一个元素的长度
Declare –A 声明关联数组
引用数组中所有元素
${array_name[*]/[@]}
数组元素切片:${array_name[@]:offset:number}
Offset 要跳过的元素个数
Number: 要取出的元素个数,省略number,表示取偏移量后面的所有元素
向非稀疏格式数组中追加元素
Array_name[${#array_name[*]}]=
删除数组中某个元素
Unset array_name[index]
关联数组
Declare –A array_name
Array_name=([index_name1]=”val1” [index_name2]=”val2” …)
Bash的内置字符串处理工具
字符串切片:
${var:offset:number}
取字符串子串
${var: -4} 有空格
取字符串的最右侧的几个字符 冒号后面有一个空白字符
基于模式取子串
${var#*word} word是指递归的分隔符,功能:自左而右,查找var变量所存储的字符串第一次出现word的分隔符,删除字符串开头至此分隔符之间的所有字符
${var##*word} word是指递归的分隔符,功能:自左而右,查找var变量所存储的字符串直到最后一次出现word的分隔符,删除字符串开头至此分隔符之间的所有字符
mypath=”/etc/init.d/functions”
echo ${mypath##*/}: functions
echo ${mypath#*/}: etc/init.d/functions
${var%word*} : word是指递归的分隔符,功能:自右而左,查找var变量所存储的字符串直到第一次出现word的分隔符,删除此分隔符至字符串尾部之间的所有字符
${var%%word*}: word是指递归的分隔符,功能:自右而左,查找var变量所存储的字符串直到最后一次出现word的分隔符,删除此分隔符至字符串尾部之间的所有字符
mypath=”/etc/init.d/functions”
${mypath%/*}: /etc/init.d
查找替换:
${var/pattern/substi}:查找var所表示的字符串,第一次被pattern所匹配的字符串替换为substi字符串
${var//pattern/substi}:查找var所表示的字符串,所有被pattern所匹配字符串替换为substi字符串
${var/#pattern/substi}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,替换为substi字符串
${var/%pattern/substi}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,替换为substi字符串
注意:pattern中使用glob风格的通配符
查找删除
${var/pattern}: 以pattern查找为模式,查找var字符串中第一次的匹配,并删除值
${var//pattern}:以pattern查找为模式,查找var字符串中所有的匹配,并删除值
${var/#pattern}:以pattern查找为模式,查找var字符串中行首第一次匹配,并删除值
${var/%pattern}:以pattern查找为模式,查找var字符串中行尾第一次匹配,并删除值
大小写转换
${var^^} 把var中所有小写字符转换为大写
${var,,} 把var中所有大写转换为小写
变量赋值
${var:-value} 如果var变量为空,或未设置,那么返回为value, var不为空,则返回var
${var:=value} 如果var变量为空,或未设置,那么返回为value,并将value赋值给var变量, var不为空,则返回var
${var:+value} 如果var变量为不为空,那么返回为value
${var:?ERROR_INFO} 如果var为空,或未设置,那么返回ERROR_INFO为错误提示,否则返回var的值
Declare 变量声明
-i 声明为数值类型 declare -i a=awed 则a的值变为0
-r 声明为只读变量 declare -r a=hello
-a 声明为普通数组 declare -a a a[0]=value 索引默认从0开始的数字
-A 声明为关联数组 declare -A a a[a]=value 索引可以自己指定
-f 查看声明的函数及内容 declare –f
-F 查看声明的函数名 declare -F
-l 将声明的变量字符全转化为大写 declare –l a=XYZ 则a的值为xyz
-u将生命的变量字符全转化为小写 declare –u a=xyz 则a的值为XYZ
echo ${a^^} 将数组中的小写全转化为大写
echo ${a,,} 将数组中的大写全转化为小写
YUM软件包管理
YUM(Yellowdog Update Modifer),rpm的前端程序,用来解决程序的依赖性,可以在多个库之间定位软件包。
搜索:
search string1 [string2]…
以指定的关键字搜索程序包名及summary信息
查看指定包所依赖的capability
deplist package1 [package2]…
查看yum事物历史
history [info|list|package-list|package-info|summary|addon-info|undo|rollback|new|sync|stats]
软件包组管理
groupinstall group1 [group2]…
groupupdate group1 [group2]…
grouplist [hidden] …
groupremove group1 [group2]…
groupinfo group1 [group2]…
YUM的命令行选项
–nogpgcheck 禁止gpg检查
-y 默认回答yes
-q 静默模式
–disablerepo=repoidglob 临时禁止此处指定的repo
–enablerepo=repoidglob 临时启用此处指定的repo
–noplugins 禁止所有插件
程序包编译
程序包编译安装:
Application-Version-release.src.rpm安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装
源代码–>预处理–>编译–>汇编–>链接–>执行
C代码编译安装三步骤
1. ./configure
1)通过选项传递参数,指定启用特性,安装路径等,执行时会参考用户的指定以及makefile.in文件生成makefile
2)检查依赖到的外部环境
2. make 根据makefile文件构建应用程序
3. make install 复制文件到相应路径
注意:安装前查看install readme文件,获取相关信息
源码安装http服务
1.先从ftp服务器上下载相应要安装的源码包
2.解压缩源码包
、
3.编译安装前先查看其install和readme文档,获取相关信息
4. ./configure –help可以获取相关选项的参数
5. ./configure编译 –prefix指定安装路径
6 make
7 make install
8 编译安装完成后,可以查看相应安装的文件
9 将编译的程序导入到环境变量中
10 将程序使用的库文件导入到库中,ldconfig重新加载库缓存
11 导入头文件
12 导入帮助文件
13 启动服务
14 访问ip对应80端口 如links
紧急模式恢复受损的kernel文件
1.查看kernel版本信息
2.rpm -e kernel –nodeps 进入救援模式
3 查看分区挂在情况
4 rpm -ivh /run/install/repo/Packages/kerner*.rpm –root=/mnt/sysimage
5 重启
输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
原创文章,作者:Stupid_L,如若转载,请注明出处:http://www.178linux.com/39280