管道(pipe)操作为不同命令之间的协同工作提供了一种机制,位于管道符号“|”左侧的命令输出的结果,将作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。
举个例子:
[root@centos01 ~]# grep "/bin/bash$" /etc/passwd <!--提取前--> root:x:0:0:root:/root:/bin/bash test:x:1000:1000:test:/home/test:/bin/bash bob:x:1002:1002::/home/bob:/bin/bash [root@centos01 ~]# grep "/bin/bash$" /etc/passwd | awk -F: '{print $1,$7}' <!--提取后--> root /bin/bash test /bin/bash bob /bin/bash [root@centos01 ~]# df -hT <!--提取之前--> 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/sda3 xfs 76G 5.2G 71G 7% / devtmpfs devtmpfs 474M 0 474M 0% /dev tmpfs tmpfs 489M 0 489M 0% /dev/shm tmpfs tmpfs 489M 6.9M 482M 2% /run tmpfs tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda1 xfs 197M 136M 61M 70% /boot tmpfs tmpfs 98M 0 98M 0% /run/user/0 /dev/sr0 iso9660 664M 664M 0 100% /mnt [root@centos01 ~]# df -hT | grep "/$" |awk '{print $6}' <!--提取之后其中grep “/$”表示提取以“/”结尾的行--> 7%上述中awk命令的作用是以冒号“:”作为分隔,输出第1个,第7个区域的字符串。其中的“-F”部分用来指定分割符号(未指定时,默认以空格或制表符分隔)。
三、使用Shell变量各种Shell环境中都使用到了“变量”的概念。Shell变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。通过使用变量,Shell程序能够提供更加灵活的功能,适应性更强。
常见Shell变量的类型包括自定义变量、环境变量、位置变量、预定义变量。
自定义变量是由系统用户自己定义的变量,只在用户自己的Shell环境中有效,因此又称为本地变量。在编写Shell脚本程序时,通常会设置一些特定的自定义变量,以适应程序执行过程中的各种变化,满足不同的需求。
1)定义新的变量定义变量的基本格式为“变量名=变量值”,等号两边没有空格。变量名称需以字母或下划线开头,名称中不要包含特殊字符(如+、-、*、/、?、%、&、#等)。
[root@centos01 ~]# li=Python [root@centos01 ~]# version=2.7.13 2)查看和引用变量的值通过在变量名称前添加前导符号“$”,可以引用一个变量的值。使用echo命令可以查看变量,可以在一条echo命令中同时查看多个变量值。
[root@centos01 ~]# echo $li python [root@centos01 ~]# echo $version 2.7.13 [root@centos01 ~]# echo $li $version python 2.7.13 3)变量赋值的特殊操作在等号“=”后边直接指定变量内容是为变量赋值的最基本方法,除此之外,还有一些特殊的赋值操作,可以更灵活地位变量赋值,以便适用于各种复杂的管理任务。
①双引号(" ") [root@centos01 ~]# PYTHON=python 2.7.13 <!--错误赋值--> bash: 2.7.13: 未找到命令... [root@centos01 ~]# PYTHON="python 2.7.13" <!--正确的赋值--> [root@centos01 ~]# echo $PYTHON <!--查看值--> python 2.7.13在双引号范围内,使用“$”符号可以引用其他变量的值(变量引用),从而能够直接调用现有变量的值来赋给新的变量。
[root@centos01 ~]# echo $version 2.7.13 [root@centos01 ~]# sqlserver="sqlserver $version" <!--以变量的值进行赋值--> [root@centos01 ~]# echo $sqlserver <!--查看值--> sqlserver 2.7.13 ②单引号(' ')当要赋值的内容中包含$、“、\等具有特殊含义的字符时,应使用单引号括起来。在单引号的范围内,将无法引用其他变量的值,任何字符均作为普通字符看待。
[root@centos01 ~]# sqlserver='sqlserver $version' <!--$符号不能再引用变量--> [root@centos01 ~]# echo $sqlserver <!--原样输出字符串--> sqlserver $version ③反撇号(`)反撇号主要用于命令替换,允许将执行某个命令的屏幕输出结果赋值给变量。反撇号括起来的范围必须能够执行的命令行,否则将会出错。
[root@centos01 ~]# ls -lh `which useradd` -rwxr-x---. 1 root root 116K 11月 6 2016 /usr/sbin/useradd上述操作相当于连续执行了两条命令——先通过which useradd命令查找出useradd命令的程序位置,然后根据查找结果列出文件属性。执行过程中,会用which useradd命令的输出结果替换整个反撇号范围。
④read命令