【知识积累】大数据旅程-Linux 总结

1、循环遍历文件每一行,并打印行数

1.1、目标文件

1.2、实现1:

#!/bin/bash

num=0
for i in `cat test.txt`; do #使用cat命令读取test文件
 echo $i
 ((num++))
done
echo num:$num

echo "==========================================="

oldIFS=$IFS
IFS=$'\n' #将环境变量IFS默认分隔符(制表符、空白符、换行符)修改为换行符
num=0
for i in `cat test.txt`; do #使用cat命令读取test文件
 echo $i
 ((num++))
done
echo num:$num
IFS=$IFS

【知识积累】大数据旅程-Linux 总结_第1张图片

1.3、实现2:

#!/bin/bash

num=0
lines=`cat test.txt | wc -l` #使用cat读取文件,然后使用wc -l来读取文件的行数
for ((i=1; i<=lines; i++)); do
 line=`head -$i test.txt | tail -1` #使用head -$i | tail -1来读取文件的前i行的最后一行
 echo $line
 ((num++))
done
echo num:$num

【知识积累】大数据旅程-Linux 总结_第2张图片

1.4、实现3:

#!/bin/bash

#使用输入重定向"<"来输入test.txt的整个内容
#使用read来读取test.txt的每一行内容,当遇到换行符,即进入下一行的同时,也进入了下一次while循环,read命令对换行符敏感。
num=0
while read line; do
 echo $line
 ((num++))
done < test.txt
echo num:$num

【知识积累】大数据旅程-Linux 总结_第3张图片

1.5、实现4:

#!/bin/bash

export num=0
#使用管道,左边创建一个子进程来处理cat,右边创建一个子进程来处理while …… done这一部分,最后打印父进程(当前进程)的num。
#export:导出非共享,子进程修改变量,不会影响父进程的变量。
#如果要实现共享,子进程可以将变量写入文件,然后父进程读取文件获取最新的变量。
cat test.txt | while read line; do 
 echo $line
 ((num++))
done
echo num:$num

echo "======================="

#当使用管道时,右边创建子进程,子进程遇到小括号,又会创建一个子进程来处理小括号里面的内容,即while …… num:$num这一部分。
#将while …… done这一部分用小括号括起来,done后面使用;连接,直接打印小括号的变量。
num=0
cat test.txt | (while read line; do
 echo $line
 ((num++))
done; echo num:$num)

echo "======================="

#使用大括号和小括号的区别在于:
#1、右边子进程不会再创建子进程来处理,而是由当前子进程来处理大括号里面的内容,即while …… num:$num这一部分。
#2、最后一个命令结尾必须要使用;号。
num=0
cat test.txt | { while read line; do
 echo $line
 ((num++))
done; echo num:$num;}

【知识积累】大数据旅程-Linux 总结_第4张图片

2、@*和@#

#!/bin/bash

echo $1
echo $2
echo $*
echo $@

#当$*用双引号时,参数列表是作为一个元素
#当$@用双引号时,参数列表中的每个参数都切割成了一个单独的元素

echo "====================="

for i in "$*"; do
 echo $i
done

echo "===================="

for i in "$@"; do
 echo $i
done

【知识积累】大数据旅程-Linux 总结_第5张图片

3、七步扩展

  • 花括号 mkdir -p d/{a,b,c}d
  • 波浪线 cd ~
  • 变量&参数 $ $$ ${}(……)
  • 命令替换ls -l `echo $path`
  • 算术扩展 num=$((3+4))
  • word拆分 $IFS
  • 路径 * (零到多个任意字符)?
  • 引用删除 echo "hello"
  • * 重定向 >(发生在执行前)

你可能感兴趣的:(BigData)