zoukankan      html  css  js  c++  java
  • 第2章:标准输入与输出

    第2章:标准输入与输出

    2.1echo printf终端打印

    echo显示命令默认情况每次调用后会添加一个换行符。

    echo 使用带单引号时,Bash不会对单引号中的变量(如$var)求值,只会按照原样显示,如果需要显示变量(如$var)的求值,只需要加上双引号或去掉单引号即可。

    范例1:

    [root@cloucentos6 home]# cat test.sh

    #!/bin/bash

    var="hello world!"

    echo ‘$var’

    echo "$var"

    echo $var

    [root@cloucentos6 home]# ./test.sh

    $var

    hello world!

    hello world!

    printf显示命令默认情况不会自动换行,需要后面加 换行符号,同时加上单引号或双引号。

    printf 显示命令可以使用格式字符串,如%s、%c、%d、%f等都是格式替代符,其所对应的参数可以置于带引号的格式字符串之后。

    范例2:

    [root@cloucentos6 home]# cat ./test.sh

    #!/bin/bash

    printf "%-10s %-10s " Name Mark

    printf "%-10s %-4.2f " Tom 99.9999

    printf "%-10s %-4.2f "  Key 77.7777

    [root@cloucentos6 home]# ./test.sh

    Name       Mark     

    Tom        100.00

    Key        77.78

    标注:%s输出一个字符串,-10左对齐且宽度为10的字符串替代(  - 表示左对齐)

    %f表示按浮点数格式输出, -4.2分别表示 – 表示左对齐,4表示取前面4位数输出,2表示保留小点两位数,每行格式字符串后都需要加一个换行符

    2.2read接收键盘输入

    read  -n 命令从输入中读取n个字符并存入变量var

    范例1:限制输入超过4个字符,如果输入超过4个字符直接显示。

    [root@cloucentos6 home]# cat test.sh

    #!/bin/bash

    echo "请输入4个字符以内:"

    read -n 4 var1

    echo

    echo "打印输出:"

    echo "$var1"

    [root@cloucentos6 home]# ./test.sh

    请输入4个字符以内:

    3333

    打印输出:

    3333

    read –s 命令键盘输入的字符不回显,只显示输出。

    范例2:

    [root@cloucentos6 home]# cat test.sh

    #!/bin/bash

    read -s var1

    echo $var1

    [root@cloucentos6 home]# ./test.sh

    222

    read  -p 显示提示信息

    范例3:

    [root@cloucentos6 home]# cat test.sh

    #!/bin/bash

    read -p "请输入你的拼音名字:" var

    [root@cloucentos6 home]# ./test.sh

    请输入你的拼音名字:zhangshang

    Read  -d 用定界符结束输入行

    范例4:输入%就结束输入

    [root@cloucentos6 home]# cat test.sh

    #!/bin/bash

    read -d "%" var

    [root@cloucentos6 home]# ./test.sh

    abc

    123

    %[root@cloucentos6 home]#

    Read  -t  特定时间内读取输入

    范例5:超过3秒未输入任何字符自动结束脚本

    [root@cloucentos6 home]# cat test.sh

    #!/bin/bash

    if

    read -t 3 -p "请输入你的拼音名字:" name

    then

    echo "hello $name"

    else

    echo

    echo "你已超过3秒未输入,已结束输入"

    fi

    exit 0

    [root@cloucentos6 home]# ./test.sh

    请输入你的拼音名字:zhangshang

    hello zhangshang

    [root@cloucentos6 home]# ./test.sh

    请输入你的拼音名字:

    你已超过3秒未输入,已结束输入

    2.3、读取命令序列输出

    Shell脚本特性之一就是可以轻松将多个命令或工具组合起来生成输出,一个命令的输出可以作为一个命令的输入,而这个命令的输出又可以传递给另一个命令当成输入,依次类推,这种命令组合的输出可以被存储在一个变量中。

    使用管道命令“|”连接每一个过滤器(命令或工具)。

    范例1:ls列出当前目录输出当成cat –n的输入内容加上行号,再输出重写向到文件out.txt

    [root@cloucentos6 home]# ls | cat -n > out.txt

    [root@cloucentos6 home]# cat out.txt

         1    

         2     lost+found

         3     out.txt

         4     test.sh

    使用子shell方法也可以实现,子shell本身是独立进程,可以使用 ( ) 操作符定义子shell。

    范例2:将ls | cat –n组合命令定义成一个变量cmd,再直接输出变量cmd,添加 换行符。

    [root@cloucentos6 home]# cat test.sh

    #!/bin/bash

    cmd=$(ls | cat -n)

    echo "$cmd "

    pwd

    (cd /home; ls)

    pwd

    [root@cloucentos6 home]# ./test.sh

         1    

         2     lost+found

         3     out.txt

         4     test.sh

    /home

      lost+found  out.txt   test.sh

    /home

    范例3:通过引用子shell的方式保留空格和换行符,可以添加双引号,以保留空格和换行符

    [root@cloucentos6 home]# cat test.sh

    #!/bin/bash

    cmd="$(ls | cat -n)"

    echo "$cmd"

    [root@cloucentos6 home]# ./test.sh

         1    

         2     lost+found

         3     out.txt

         4     test.sh

    范例4:使用反引用方法也可以用于存储命令输出。反引号和单引号不是一回事,它位于键盘的 ~ 键上。

    [root@cloucentos6 home]# cat test.sh

    #!/bin/bash

    cmd=`ls | cat -n`

    echo "$cmd "

    [root@cloucentos6 home]# ./test.sh

         1    

         2     lost+found

         3     out.txt

         4     test.sh

    2.4、重定向与管道

    <    重定向改变标准输入

    [root@localhost home]# cat abc.txt

    abcdef

    [root@localhost home]# tr -d 'f' < abc.txt  #把tr –d ‘f’删除f字符的命令输入到掉abc.txt文本里

    abcde  

    >    重定向改变标准输出,输出的内容会覆盖原来的文件内容

    [root@localhost home]# ifconfig > abc.txt     #把ifconfig命令输出的内容输出到abc.txt文本

    >>   重定向改变标准输出,输出的内容不会覆盖原来的文件内容,只会追加到原来文件内容的后面

    [root@localhost home]# ifconfig >> abc.txt    #把ifconfig命令输出的内容输出到abc.txt文本

    |   管道命令

    可以把< 输入 和 > 输出连接起来,可以把两个命令衔接在一起,把第一个命令的标准输出当作第二个命令的标准输入。

    [root@localhost home]# ifconfig | grep "inet addr"      #把ifconfig输出的结果通过管道命令给grep当作输入截取以inet addr开头的信息。

    inet addr:192.168.0.102  Bcast:192.168.0.255  Mask:255.255.255.0

    inet addr:127.0.0.1  Mask:255.0.0.0

    2.5、交互输入自动化

    交互式输入是指只有当命令要求获取输入时,才由用户手动输入。

    范例1:读取交互输入脚本

    [root@cloucentos6 home]# cat test.sh

    #!/bin/bash

    read -p "Enter number:" no

    read -p "Enter name:" name

    echo you have entered $no $name

    [root@cloucentos6 home]# ./test.sh

    Enter number:2

    Enter name:zhang

    you have entered 2 zhang

    [root@cloucentos6 home]# echo -e "2 zhang " | ./test.sh

    you have entered 2 zhang

    2.6、波浪号展开与通配符

    Shell有两种与文件名相关的展开。第一种是波浪号展开,另一种全局展开或者路径展开。

    2.6.1、波浪号展开

             在命令行字符串的第一个字符为波浪号 ~ 或者变量指定(例如PATH或 CDPATH)的值里任何未被引号括起来的冒号之后第一个字符为波浪号 ~ 时,shell变加执行波浪号展开。波浪号展开的目的是将用户根目录的符号型表示方式,改变实际的目录路径。可以采用直接或间接方式执行此程序的用户,如未明白指定,则为当前的用户:

    [root@cloucentos6 ~]# ls $HOME  #显示当前用户HOME目录

    [root@cloucentos6 ~]# ls ~        #显示当前用户HOME目录

    使用波浪号的好处:

    这是一种简介的概念表示方式。

    这可以避免在程序里把路径名称直接编码。

    2.6.2、通配符

             寻找文件名里的特殊字符,也是shell提供的服务之一。当它找到这类字符时,会将它们视为要匹配的模式,也就是,一组文件的规格,它的文件名称都匹配于某个给定的模式。

    标注:通配符与正则表达式的特殊字符作用不一样(第3章会介绍正则表达式)

      

    使用set结构的通配符如下所示:

  • 相关阅读:
    [原创.数据可视化系列之六]使用openlyaers进行公网地图剪切
    [原创.数据可视化系列之五]韩国"萨德"系统防御图
    [原创.数据可视化系列之四]跨平台,多格式的等值线和等值面的生成
    [原创.数据可视化系列之三]使用Ol3加载大量点数据
    [原创.数据可视化系列之二]使用cesium三维地图展示美国全球军事基地分布
    [原创.数据可视化系列之一]使用openlayers 3 显示聚合数据
    全球领先的redis客户端:SFedis
    ESSENTIALS OF PROGRAMMING LANGUAGES (THIRD EDITION) :编程语言的本质 —— (一)
    请大家帮我找一找bug —— 一个MySQL解析程序(JAVA实现)
    半个月使用rust语言的体验
  • 原文地址:https://www.cnblogs.com/zoulongbin/p/6890589.html
Copyright © 2011-2022 走看看