写一个 bash脚本以输出一个文本文件 nowcoder.txt中的行数
#!bin/bash
line=0
while read p
do
((line++))
done < ./nowcoder.txt
echo $line
- 变量赋值等于号左右无空格;
- while read line do done < file 重定向,把file文件循环每一行赋值给line循环中可以对line进行操作;(read通过输入重定向,把file的第一行所有的内容赋值给变量line,循环体内的命令一般包含对变量line的处理;然后循环处理file的第二行、第三行。。。一直到file的最后一行。
还记得while根据其后的命令退出状态来判断是否执行循环体吗?
是的,read命令也有退出状态,当它从文件file中读到内容时,退出状态为0,循环继续进行;
当read从文件中读完最后一行后,下次便没有内容可读了,此时read的退出状态为非0,所以循环才会退出。) - 双小括号。参考 整数扩展。这种扩展计算是整数型的计算,不支持浮点型。((exp))结构扩展并计算一个算术表达式的值,如果表达式的结果为0,那么返回的退出状态码为0,或者 是"假",而一个非零值的表达式所返回的退出状态码将为1,或者是"true"。若是逻辑判断,表达式exp为真则为1,假则为0。
- echo想输出变量值必须加$,否则输出字符串;
================================2022.03.26
经常查看日志的时候,会从文件的末尾往前查看,于是请你写一个 bash脚本以输出一个文本文件 nowcoder.txt中的最后5行
先计算所有行数,再递减把倒数5行输出
#!bin/bash
row=0
while read line
do
((row++))
done < ./nowcoder.txt
while read line
do
if [ $row -lt 6 -a $row -gt 0 ]
then
echo $line
fi
((row--))
done < ./nowcoder.txt
if后有then;
中括号用法:中括号里[]左右必须有空格;
==========================================2022.03.27
写一个 bash脚本以输出数字 0 到 500 中 7 的倍数(0 7 14 21…)的命令
#!/bin/bash
for i in {0..500..7}
do
echo $i
done
0…500…7(0到500步长7);for循环do … done;
=================================2022.03.28
写一个 bash脚本以输出一个文本文件 nowcoder.txt 中第5行的内容。
#!bin/bash
line=1
while read p
do
if [ $line -eq 5 ]
then
echo $p
fi
((line++))
done < ./nowcoder.txt
[ 左右必须有空格
=====================================2022.03.29
写一个 bash脚本以输出一个文本文件 nowcoder.txt中空行的行号,可能连续,从1开始
#!bin/bash
row=1
while read line
do
if [ "$line" = "" ]
then
echo $row
fi
done < ./nowcoder.txt
判断字符串为空特可以
if [ -z "$line" ]
=================================2022.04.03
描述 写一个 bash脚本以统计一个文本文件 nowcoder.txt中每一行出现的1,2,3,4,5数字个数并且要计算一下整个文档中一共出现了几个1,2,3,4,5数字数字总数。
#!bin/bash
row=0
sum=0
while read line
do
num=0
len=${#line}
for((i=0;i<len;i++))
do
if [[ ${line:i:1} =~ [1-5] ]]
then
((num++))
fi
done
((row++))
((sum+=num))
echo "line$row number:$num"
done < ./nowcoder.txt
echo "sum is $sum"
索引字符串中字符:${str:i:1} 1表示从i下标截取的字符长度