read -p -s -s可以隐藏输入的内容,加上echo "" 可换行
一、数组
数组简介:
变量:用一个固定的字符串,代替一个不固定的字符串
数组:用一个固定的字符串,代替多个不固定的字符串
类型:
- 普通数组:只能使用整数作为数组索引,按顺序调用
- 关联数组:可以使用字符串作为数组索引,无法排序
${hero[1]}
declare -A position
position=([up]=baiqi [center]=anqila [down]=houyi)
¥{}
1.普通数组
1.1定义数组
方法一:一次附一个值
数组名[下标]=变量值
array[0]=pear
array[1]=apple
array[2]=orange
array[3]=peach
查看数组
declare -a | grep array
echo ${array[@]}
echo ${array[*]}
echo ${array[0]}
echo ${!array[@]} 查看下标
方法二:一次定义一组
array1=(tom jack alice)
array2=(`cat /etc/passwd`) 希望是将该文件中的每一个行作为一个元素给数组
array3=(`ls /var/ftp/Shell/for*`)
array4=(tom jack alice "bash shell")
red=111 blue=222
colors=($red $blue)
array5=(0 1 2 3 4 5 6 7 "Liunx shell" [20]=saltstack) 可以设置索引号为20
2.关联数组
2.1定义关联数组
方法一:先声明关联数组
数组名[索引]=变量名
declare -A ass_array1 定义申明该数组为关联数组
ass_array1[index1]=pear
ass_array1[index2]=apple
ass_array1[index3]=orange
ass_array1[index4]=peach
查看
echo ${ass_array1[*]}
方法二:
declare -A ass_array2
ass_array2=([index1]=tom [index2]=jack [index3]=alice)
2.2查看数组
declare -A
2.3访问数组元素
echo $(ass_array2[index2]} 访问数组中的第二个元素
echo $(ass_array2[@]} 访问数组中所有元素,等同于echo ${array1[*]}
echo $(#ass_array2[@]} 获得数组元素的个数
echo $(!ass_array2[@]} 获得数组元素的索引
3.数组和循环
通过循环定义和显示数组
通过数组统计数据
4.案例
i++ 从0开始 ++i从1开始
1.for脚本快速定义数组
#!/bin/bash
#定义数组
for aaa in `cat /etc/hostss`
do
hosts[i++]=$aaa
done#调用数组,查看
for i in ${!hosts[*]}
do
echo "第 $i 个索引,它的值为: ${hosts[$i]} "
done
如何解决for的空格分割的问题,使用IFS=$'\n' 重新定义分隔符
另外,如果脚本中还有for怎么办?存储变量,还原变量

2.数组统计性别
定义性别文件
vim sex.txt
jack m henan
alice f beijing
tom m hebei
定义脚本统计性别
awk '{print $1}' sex.txt $几代表第几列
while 用read进行输入重定向 一次读一行
[root@192 ~]# cat while.sh
#!/bin/bash
while read aaa
do
echo $aaa
done < sex.txt
[root@192 ~]# bash while.sh
jack m heibei
tom f beijing
alice f shangdong
[root@192 ~]#for循环是根据空格和回车进行分割
#!/bin/bash
declare -A sexwhile read line
do
type=`echo $line | awk '{print $2}'`
let sex[$type]++
done < sex.txtfor i in ${!sex[*]}
do
echo "suoyin $i : zhi: ${sex[$i]} "
done
3.使用数组统计,用户shell的类型和数量
!/bin/bash
declare -A shells
while read line
dotype=`echo $line | awk -F: '{print $7}'` -F分隔符 ¥7 第七列
let shells[$type]++
done < /etc/passwdecho ${shells[*]}
echo ${!shells[*]}
4.while脚本快速定义数组
#!/bin/bash #hosts文件内容的行数,成为了while的循环次数
while read line
do
hosts[++i]=$line
done < /etc/hostsfor i in ${!hosts[*]}
do
echo $i ${hosts[$i]}
done
二、函数
概述
概念:函数是一段完成特定功能的代码片段(块),在shell中定义了函数,就可以使代码模块化,便于复用代码,注意函数必须先定义才可以使用
重点:传参$1,$2 局部变量local 返回值return $?
1.定义函数
方法一:
函数名 (){
函数要实现的功能代码
}
方法二:
function 函数名{
函数要实现的功能代码
}
2.调用函数
函数名
函数名 参数1 参数2