Linux下命令执行顺序控制与管道

一、命令执行顺序的控制

    1. 顺序执行多条命令
    • 通常情况下,每次只能在终端输入一条命令,执行完成后,再输入第二条命令,然后再按回车执行。要想一次性输入完执行,可以使用简单的顺序执行";"来完成。例如:
      sudo apt-get update
      sudo apt-get install cowsay
      cowsay hello curry
    • 可以一次性输入sudo apt-get update; sudo apt-get install cowsay; cowsay hello curry
    1. 有选择的执行命令
    • 在顺序执行任务时,如果前面的命令执行不成功,而后面的命令又依赖于上一条命令的结果,那么就会造成花了时间,最终却得到一个错误的结果。那么需要能够有选择性的来执行命令。比如:上一条命令执行成功才继续下一条,或者不成功又该做出其他什么处理,比如:可以使用which来查看是否安装某个命令,如果找不到就执行该命令,否则什么也不做。which cowsay> /dev/null && cowsay -f -head -in ohch~
    • 在C语言中,&&表示逻辑与,||表示逻辑或,同样shell中也有这两个符号。它们的区别在于,shell中的这两个符号除了可以用于表示逻辑的与和或之外,也可以实现命令执行顺序的简单控制。&&表示如果前面的命令执行结果返回0时,则执行后面的指令;否则不执行。||就是与&&相反的控制效果,当上一条命令执行结果不是0时,则执行它后面的命令。可以从$?环境变量获取上一次命令的返回结果:
      which cowsay
      echo $? cowsay未安装,结果为1
      which cat
      echo $? 结果为0
    • 除了基本的使用外,还可以结合&&和||来实现一些操作,比如:
      which cowsay> /dev/null && echo “exist” || echo “not exist”

二、管道

  • 管道是一种通信机制,通常用于进程间的通信(也可以通过socket进行网络通信),它表现出来的形式就是将前面每一个进程的输出stdout直接作为下一个进程的输入stdin。
  • 管道又分为匿名管道和具名管道,在使用一些过滤程序时会经常用到的就是匿名管道,在命令行中由|分隔符表示。
      1. 试用
      • 先试用一下管道,比如查看/etc目录下有哪些文件和目录,使用ls命令来查看:
        ls -al /etc
      • 有太多的内容,屏幕不能完全显示,这时候可以使用滚动条或快捷键滚动窗口来查看。不过这时候可以使用管道:
        ls -al /etc | less
      • 通过管道将前一个命令ls的输出作为下一个命令less的输入,然后就可以一行一行的查看。
      1. cut命令,打印每一行的某一段
      • 打印/etc/passwd文件中以:分隔符的第一个字段和第六个字段分别表示用户名和home目录:
        cut /etc/passwd -d ‘:’ -f 1,6
      1. grep命令,在文本或stdin中查找匹配字符串
      • grep命令是很强大的,也是相当常用的一个命令,它结合正则表达式可以实现很复杂却很高效的匹配和查找。搜索/home/cdl目录下所有包含"cdl"的所有文本文件,并显示出现在文本中的行号:
        grep -rnI “cdl” ~
      • 参数说明:
        • -r:表示递归搜索子目录中的文件
        • -n:表示打印匹配的行号
        • -I:表示忽略二进制文件
      • 也可以在匹配字段中使用正则表达式,查看环境变量中以"roon"结尾的字符串
        export | grep “.*roon$” 注:$表示一行的末尾
      1. wc命令,简单小巧的计数工具
      • wc命令用于统计并输出一个文件中行、单词和字节的数目,参数可以通过wc --help查看。输出/etc/passwd文件的统计信息:
        wc /etc/passwd
      • 再来结合管道来操作一下,下面统计/etc下面的所有目录数:
        ls -dl /etc/*/ | wc -l
      1. sort排序命令
      • sort功能很简单就是将输入按照一定的方式排序,然后再输出,它支持的排序有按字典排序、数字排序,按月排序,随机排序,反转排序,指定特定字段进行排序等等。
        • 默认为字典排序:
          cat /etc/passwd | sort
        • 按特定字段排序:
          cat /etc/passwd | sort -t ‘:’ -k 3 -n
        • 参数说明:
      • -t:用于指定字段的分隔符
      • -k:用于指定对哪个字段进行排序
      • -n:如果安装数字排序就要加上-n参数
      1. uniq去重命令
      • uniq命令可以用于过滤或输出重复行,使用history命令查看最近执行过的命令:
        history | cut -c 8- | cut -d ’ ’ -f 1 | uniq
      • 然后,经过层层筛选和过滤,可以发现的确只输出了执行的命令那一列。不过,去重效果不明显,之所以不明显是因为uniq命令只能去除连续重复的行,所以要达到预期效果,需要先进行排序:
        history | cut -c 8- | cut -d ’ ’ -f 1 | sort | uniq
      • 输出重复过的行(重复的只输出一个)及重复次数:
        history | cut -c 8- | cut -d ’ ’ -f 1 | sort | uniq -dc

猜你喜欢

转载自blog.csdn.net/cdlwhm1217096231/article/details/88309395