day3 C高级 (SHELL)

一、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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kei歪歪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值