数组知识与编译安装
一数组知识
1、定义数组
声明数组:
declare -a ARRAY_NAME
declare -A ARRAY_NAME: 关联数组
数组元素的赋值:
(1) 一次只赋值一个元素;
ARRAY_NAME[INDEX]=VALUE
weekdays[0]="Sunday"
weekdays[4]="Thursday"
pp[1]="sun"
(2) 一次赋值全部元素:
ARRAY_NAME=("VAL1" "VAL2" "VAL3" …) arr=(1 3 4 5)
(3) 只赋值特定元素:
ARRAY_NAME=([0]="VAL1" [3]="VAL2" …)
(4) 交互式数组值对赋值
read -a ARRAY
2、数组引用
引用数组元素:${ARRAY_NAME[INDEX]}
注意:省略[INDEX] 表示引用下标为0 的元素
数组的长度( 数组中元素的个数):
${#ARRAY_NAME[*]}
${#ARRAY_NAME[@]}
另外:我发现利用${#arr[3]}可以显示出arr数组中第四个元素的字符串长度。
示例:生成10 个随机数保存于数组中,并找其中的最小值和最大值。
3、数组数据处理
引用数组中的元素:
所有元素:${ARRAY[@]}, ${ARRAY[*]}
数组切片:${ARRAY[@]:offset:number}
offset: 要跳过的元素个数
number: 要取出的元素个数
取偏移量之后的所有元素
${ARRAY[@]:offset}
向数组中追加元素:
ARRAY[${#ARRAY[*]}]
删除数组中的某元素:导致稀疏格式
unset ARRAY[INDEX]
关联数组:
declare -A ARRAY_NAME
ARRAY_NAME=([idx_name1]=('val1' [idx_name2]='val2‘…)
4、字符串处理
(1)bash 的字符串处理工具:
字符串切片:
${#var}: 返回字符串变量var 的长度
${var:offset}: 返回 字符串变量var 中从第offset 个字符后(不包括第offset 个字符)的字符开始,到最后的部分,
offset 的取值在0 到 到 ${#var}-1 之间
${var:offset:number} :返回 字符串变量var 中从第offset 个字符 后(不包括第offset 个字符)的字符开始 ,长度为number 的部分
${var: -lengh} :取字符串的最右侧几个字符:
注意:冒号后必须有一空白字符
(2)基于模式取子串:
${var#*word} :其中word 可以是指定的任意字符
功能:自左而右,查找var 变量所存储的字符串中,第一
次出现的word, 删除字符串开头至第一次出现word 字符之间的所有字符。
${var##*word} :同上,不同的是,删除的是字符串开头至最后一次由word 指定的字符之间的所有内容。
file="/var/log/messages"
${file##*/}: messages
${var%word*} :其中word 可以是指定的任意字符;
功能:自右而左,查找var 变量所存储的字符串中,第一
次出现的word, 删除字符串最后一个字符向左至第一次出现
word 字符之间的所有字符;
file="/var/log/messages"
${file%/*}: /var/log
${var%%word*} :同上,只不过删除字符串最右侧的字符向
左至最后一次出现word 字符之间的所有字符;
示例: :url=http://www.magedu.com:80
${url##*:} 80
${url%%:*} http
(3)查找替换:
${var/pattern/substi} :查找var 所表示的字符串中,第一次被pattern 所匹配到的字符串,以substi 替换之。
${var//pattern/substi}: 查找var 所表示的字符串中,所有能被pattern 所匹配到的字符串,以substi 替换之。
${var/#pattern/substi} :查找var 所表示的字符串中,行首被pattern 所匹配到的字符串,以substi 替换之。
${var/%pattern/substi} :查找var 所表示的字符串中,行尾被pattern 所匹配到的字符串,以substi替换之。
查找并删除:
${var/pattern} :查找var 所表示的字符串中,删除第一次被pattern 所匹配到的字符串
${var//pattern} :删除所有匹配到的字符串
${var/#pattern} :删除行首匹配的字符串
${var/%pattern} :行尾
字符大小写转换:
${var^^} :把var 中的所有小写字母转换为大写
${var,,} :把var 中的所有大写字母转换为小写
(4)变量赋值
${var:-value} :如果var 为空或未设置,那么返回value ;否
则,则返回var 的值
${var:+value} :如果var 不空,则返回value
${var:=value} :如果var 为空或未设置,那么返回value ,并
将 将value 赋值给var ;否则,则返回var 的值
${var:?error_info} :如果var 为空或未设置,那么返回
error_info ;否则,则返回var 的值
为脚本程序使用配置文件, 实现变量赋值
(1) 定义文本文件,每行定义“name=value”
(2) 在脚本中source此文件即可。
(5)高级变量
Shell 变量一般是无类型的,但是bash Shell 提供了declare和 和
typeset 两个命令用于指定变量的类型,两个命令是完全等价
的。
declare [ 选项] 变量名
-r 将变量设置为只读属性
-i 将变量定义为整型数
-a 将变量定义为数组
-f 显示此脚本前定义过的所有函数名及其内容
-F 仅显示此脚本前定义过的所有函数名
-x 将变量声明为环境变量
-l 将变量值转为小写字母
-u 将变量值转为大写字母
(6)间接变量引用
如果第一个变量的值是第二个变量的名字,从第一个变量引
用第二个变量的值就称为间接变量引用
variable1=variable2
variable2=value
variable1 的值是variable2 ,而variable2 又是变量名,
variable2 的值为value ,间接变量引用是指通过variable1获 获
得变量值value 的行为。
bash Shell 提供了两种格式实现间接变量引用
eval tempvar=\$$variable1
tempvar=${!variable1}
eval 命令将会首先扫描命令行进行所有的置换,然后再执
行该命令。该命令适用于那些一次扫描无法实现其功能的
变量。该命令对变量进行两次扫描 。
示例:
[root@server ~]# V1=pwd
[root@server ~]# echo $V1
pwd
[root@server ~]# eval $V1
/root
(7)创建临时文件
mktemp 命令:创建的临时文件可避免冲突
mktemp [OPTION]… [TEMPLATE]
TEMPLATE: filename.XXX
X 至少要出现三个
OPTION: :
-d: 创建临时目录
–tmpdir=/DIR :指明临时文件所存放的目录位置
实例:
#mktemp –tmpdir=/testdir test.XXXXXX
(8)bash配置
bash 的配置文件
按生效范围划分,存在两类:
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
个人配置:
~/.bash_profile
~/.bashrc
(9)Profile类
按功能划分,存在两类:
profiile 类和bashrc类 类
profile 类:为交互式登录的shell 提供配置
全局:/etc/profile, /etc/profile.d/*.sh
个人:~/.bash_profile
功用:
(1) 用于定义环境变量
(2) 运行命令或脚本
(10)Bashrc类
bashrc 类:为非交互式和交互式登录的shell 提供配置
全局:/etc/bashrc
个人:~/.bashrc
功用:
(1) 定义命令别名和函数
(2) 定义本地变量
(11)编辑配置文件生效
修改profile 和bashrc 文件后需生效
两种 方法:
1 重新启动shell 进程
2 . 或source
例 例:
. ~/.bashrc
二编译安装
编译安装的过程总结
二进制文件 编译安装的步骤
1、安装包组
yum groupinstall "Development tools"
2、下载并解开源码包
(1)连接至10.1.0.1
此过程使用lftp 10.1.0.1由于未安装ftp,出现了未找到命令的报错。安装lftp即可。
(2)get httpd-2.2.29.tar.bz2 即可将目标文件下载至当前目录下
(3)tar xvf httpd-2.2.29.tar.bz2 解压文件
3 、./configure
要确保在httpd-2.2.29此目录下
./configure –prefix=/usr/local/http2 –sysconfdir=/etc/http2
此时会生成一个Makefile的文件。
4 、make
调用系统中gcc等工具,生成二进制文件
5 、make install
此时会生成http2的目录了
6 、启动web服务程序
netstat -atn
./apachectl start
7 、测试:关防火墙,浏览器访问
iptables -vnL 显示防火墙状态
iptables -F 临时关闭防火墙
yum install links 文字性的浏览器
links 10.1.44.3 index2.html
安装后的配置
1、二进制程序目录导入至PATH环境变量中,编辑文件/etc/profile.d/NAME.sh export PATH=/PATH/TO/BIN:$PATH
实际操作:在/etc/profile.d/http2.sh文件内定义环境变量PATH=$PATH:/usr/local/http2/bin
2、导入库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中;
让系统重新生成缓存:
ldconfig [-v]
实际操作:cd /etc/ld.so.conf.d/ 编辑 vim http2.conf
3、导入头文件 基于链接的方式实现:ln -sv
实际操作:在/usr/include路径下创建软链接ln -s /usr/local/http2/include/ http2
4、导入帮助手册
编辑/etc/man.config|man_db.conf 文件
添加一个MANPATH
实际操作:编辑vim /etc/man.config文件添加/usr/local/http2/man
原创文章,作者:178babyhanggege,如若转载,请注明出处:http://www.178linux.com/40060