一、shell中的数组
1.数组的定义和初始化
数组名=(元素值 元素值 。。。。。)
数组名=([下标]=元素值 [下标]=元素值…)----元素的个数就是具体值的个数
2.访问数组中的元素
${arr[下标]}
3.使用数组中的元素个数
(1)全部元素
${arr[*]}
${arr[@]}
(2) 元素的个数
${#arr[*]}
${#arr[@]}
(3)元素的下标
${arr[下标]}
练习:
<1> 查看目录下的文件,把结果放到数组中,打印个数,并且打印所有元素
<2>使用for循环实现数组中的元素累加
4.数组拼接
数组名=(${arr[ * ]} ${arr[ * ]}
二、SHELL中的输入输出
1.输入
read -p “…”
read -t ----------定时
2.输出
echo
(1)默认不解析转义字符,添加-e解析转义字符
(2)-n 可以取消换行
三、shell中的算术运算
1(( ))
(1)格式(( str1,str2,str3…)):与逗号运算符相同
(2)可以完成复杂运算
(3)((变量名=表达式))
(4)变量名=$(())
练习
<1>使用for循环实现1-100的累加
方式一
方式二
2、$[ ]
不能单独存在,必须使用变量接受表达式的结果
3、let进行算数运算
格式:let 变量名=表达式
(1)运算符两侧不能加空格
(2)let必须放在表达式的起始位置
4、expr 进行算数运算
(1)格式:expr 表达式
(2)运算符两侧必须加空格
(3) 使用变量是必须加$
(4)不能进行自增和自减
(5)使用某些字符时需要转义,\
(6)要把expr运算结果赋值给变量需要使用命令置换符(``)
(7)expr本质是一个命令
练习:
用expr计算下面表达式的结果,并赋值给变量a
3*(2+14/3)
由于expr不支持幂运算,把改为*
(8)expr字符串操作
expr match " $ {str}" “h”----判断是否有一个可以作为另一个的子串,返回子串的长度
expr substr " $ {str} " 位置 截取的长度-----截取字符串
expr index " $ {str} " “i”---------字符i在str中第一次出现的位置
expr length " $ {str}" -----------字符串的长度
练习:
通过read读入一个网址,将网址赋值给一个数组,使用expr以“."为界,截取字符串放入到数组中并输出
四、判断语句
(1)if
if
then
fi
(2)[]和test具有相同作用
(3)对数据的操作
-eq ------相等
-ge -------大于等于
-gt-------大于
-le-------小于等于
-lt--------小于
-ne--------不等于
(4)对文件的相关操作
#硬链接文件和源文件有相同的inode号
#inode号唯一标识一个文件a
if [ yes.sh -ef 1.sh ]
then
echo "有相同的inode号"
fi
-e---------判断文件是否存在
-b------块设备文件
-L--------为链接文件
-f---------判断文件是否是普通文件
练习:
<1>输入文件名,判断文件是否存在,再判断是否为普通文件
<2>输入两个文件,判断文件是否存在,再判断是否为同组用户的文件
-G
#!/bin/bash
read -p "输入两个文件名:" file1 file2
if test -e ${file1} -a -e ${file2}
then
echo "文件都存在!"
g1=$(ls $file1 -lh | cut -d " " -f 4 )
id1=$(grep "^$g1" /etc/group -n | cut -d ":" -f 4)
g2=$(ls $file2 -lh | cut -d " " -f 4)
id2=$(grep "^$g2" /etc/group -n | cut -d ":" -f 4)
if test ${id1} -eq ${id2}
then
echo "是同组用户文件"
else
echo "不是同组用户文件"
fi
else
if test -e ${file1}
then
echo "文件2不存在!"
elif test -e ${file2}
then
echo "文件1不存在!"
else
echo "两个文件都不存在!!"
fi
fi
五、作业
(1)使用数组统计用户家目录下的文件个数
(2)输入学生成绩,输出成绩等级
[90-100]----A
[80-90]----B
[70-80]------C
[60-70]-------D
[0-60]-------E
大于100输入不合理
#!/bin/bash
read -p "输入两个文件名:" file1 file2
if test -e ${file1} -a -e ${file2}
then
echo "文件都存在!"
if test -G ${file1} -eq -G ${file2}
then
echo "是同组用户文件"
else
echo "不是同组用户文件"
fi
else
if test -e ${file1}
then
echo "文件2不存在!"
elif test -e ${file2}
then
echo "文件1不存在!"
else
echo "两个文件都不存在!!"
fi
fi