作者:哥斯拉2502919771 | 来源:互联网 | 2023-09-07 07:03
代码块重定向是指对标准输入或者标准输出的重定向只在代码块内有效。可以重定向的代码块可以是while、until、for等循环结构,也可以是ifthen测试结构。甚至可以是函数。代码
代码块重定向是指对标准输入或者标准输出的重定向只在代码块内有效。
可以重定向的代码块可以是while、until、for等循环结构,也可以是
if/then测试结构。甚至可以是函数。
代码块输入重定向符号是<,输出重定向符号是>.
while循环重定向的例子
rewhile.sh
#!/bin/bash
#将lt /etc的结果写到loggg文件中
ls /etc > loggg
#搜索loggg文件中与rc.d所匹配的行,输出匹配行的行数
while [ "$filename" != "rc0.d" ] #当不匹配时,执行while循环体
do
#按行读妈loggg内容
read filename
echo "filename = $filename"
let "count += 1"
echo "count = $count"
done echo "$count times read"
#测试循环体外面的标准输入是否被重定向
echo -n "-----Pls. Input Data:-----"
read test
echo $test
执行: ./rewhile.sh
filename = acpi
count = 1
filename = adduser.conf
count = 2
filename = alternatives
count = 3
filename = anacrontab
count = 4
filename = apache2
count = 5
filename = apg.conf
count = 6
filename = apm
count = 7
filename = apparmor
count = 8
filename = apparmor.d
count = 9
filename = apport
count = 10
filename = appstream.conf
count = 11
filename = apt
count = 12
filename = aptdaemon
count = 13
filename = at-spi2
count = 14
filename = avahi
count = 15
filename = bash.bashrc
count = 16
filename = bash_completion
count = 17
filename = bash_completion.d
count = 18
filename = bindresvport.blacklist
count = 19
filename = binfmt.d
count = 20
filename = bluetooth
count = 21
filename = bonobo-activation
count = 22
filename = brlapi.key
count = 23
filename = brltty
count = 24
filename = brltty.conf
count = 25
filename = ca-certificates
count = 26
filename = ca-certificates.conf
count = 27
filename = ca-certificates.conf.dpkg-old
count = 28
filename = calendar
count = 29
filename = chatscripts
count = 30
filename = compizconfig
count = 31
filename = console-setup
count = 32
filename = cracklib
count = 33
filename = cron.d
count = 34
filename = cron.daily
count = 35
filename = cron.hourly
count = 36
filename = cron.monthly
count = 37
filename = crontab
count = 38
filename = cron.weekly
count = 39
filename = cups
count = 40
filename = cupshelpers
count = 41
filename = dbus-1
count = 42
filename = dconf
count = 43
filename = debconf.conf
count = 44
filename = debian_version
count = 45
filename = default
count = 46
filename = deluser.conf
count = 47
filename = depmod.d
count = 48
filename = dhcp
count = 49
filename = dictionaries-common
count = 50
filename = dnsmasq.d
count = 51
filename = doc-base
count = 52
filename = dpkg
count = 53
filename = drirc
count = 54
filename = emacs
count = 55
filename = environment
count = 56
filename = exports
count = 57
filename = firefox
count = 58
filename = fonts
count = 59
filename = fstab
count = 60
filename = ftpusers
count = 61
filename = fuse.conf
count = 62
filename = fwupd.conf
count = 63
filename = gai.conf
count = 64
filename = gconf
count = 65
filename = gdb
count = 66
filename = ghostscript
count = 67
filename = gnome
count = 68
filename = gnome-app-install
count = 69
filename = gnome-vfs-2.0
count = 70
filename = groff
count = 71
filename = group
count = 72
filename = group-
count = 73
filename = grub.d
count = 74
filename = gshadow
count = 75
filename = gshadow-
count = 76
filename = gss
count = 77
filename = gtk-2.0
count = 78
filename = gtk-3.0
count = 79
filename = guest-session
count = 80
filename = hdparm.conf
count = 81
filename = host.conf
count = 82
filename = hostname
count = 83
filename = hosts
count = 84
filename = hosts.allow
count = 85
filename = hosts.deny
count = 86
filename = hp
count = 87
filename = idmapd.conf
count = 88
filename = ifplugd
count = 89
filename = iftab
count = 90
filename = ImageMagick-6
count = 91
filename = inetd.conf
count = 92
filename = init
count = 93
filename = init.d
count = 94
filename = initramfs-tools
count = 95
filename = inputrc
count = 96
filename = insserv
count = 97
filename = insserv.conf
count = 98
filename = insserv.conf.d
count = 99
filename = iproute2
count = 100
filename = issue
count = 101
filename = issue.dpkg-old
count = 102
filename = issue.net
count = 103
filename = issue.net.dpkg-old
count = 104
filename = java-7-openjdk
count = 105
filename = kbd
count = 106
filename = kermit
count = 107
filename = kernel
count = 108
filename = kernel-img.conf
count = 109
filename = kerneloops.conf
count = 110
filename = ldap
count = 111
filename = ld.so.cache
count = 112
filename = ld.so.conf
count = 113
filename = ld.so.conf.d
count = 114
filename = legal
count = 115
filename = libao.conf
count = 116
filename = libaudit.conf
count = 117
filename = libnl-3
count = 118
filename = libpaper.d
count = 119
filename = libreoffice
count = 120
filename = lightdm
count = 121
filename = lighttpd
count = 122
filename = lintianrc
count = 123
filename = locale.alias
count = 124
filename = locale.gen
count = 125
filename = localtime
count = 126
filename = logcheck
count = 127
filename = login.defs
count = 128
filename = logrotate.conf
count = 129
filename = logrotate.d
count = 130
filename = lsb-release
count = 131
filename = lsb-release.dpkg-old
count = 132
filename = ltrace.conf
count = 133
filename = machine-id
count = 134
filename = magic
count = 135
filename = magic.mime
count = 136
filename = mailcap
count = 137
filename = mailcap.order
count = 138
filename = manpath.config
count = 139
filename = mercurial
count = 140
filename = mime.types
count = 141
filename = minicom
count = 142
filename = mke2fs.conf
count = 143
filename = modprobe.d
count = 144
filename = modules
count = 145
filename = modules-load.d
count = 146
filename = mtab
count = 147
filename = mtools.conf
count = 148
filename = mysql
count = 149
filename = nanorc
count = 150
filename = netconfig
count = 151
filename = network
count = 152
filename = NetworkManager
count = 153
filename = networks
count = 154
filename = newt
count = 155
filename = nsswitch.conf
count = 156
filename = openal
count = 157
filename = openmpi
count = 158
filename = opt
count = 159
filename = os-release
count = 160
filename = pam.conf
count = 161
filename = pam.d
count = 162
filename = papersize
count = 163
filename = passwd
count = 164
filename = passwd-
count = 165
filename = pcmcia
count = 166
filename = perl
count = 167
filename = pki
count = 168
filename = pm
count = 169
filename = pnm2ppa.conf
count = 170
filename = polkit-1
count = 171
filename = popularity-contest.conf
count = 172
filename = ppp
count = 173
filename = printcap
count = 174
filename = profile
count = 175
filename = profile.d
count = 176
filename = protocols
count = 177
filename = pulse
count = 178
filename = python
count = 179
filename = python2.7
count = 180
filename = python3
count = 181
filename = python3.5
count = 182
filename = rc0.d
count = 183
183 times read
-----Pls. Input Data:-----caicai
caicai
cat refor.sh
#!/bin/bash
#将lt /etc的结果写到loggg文件中
ls /etc > loggg
#计算loggg文件的最大行数,并赋给maxline变量
#这是与while和until循环最大的区别
#灵活运用了输入重定向<
maxline=$(wc -l #搜索loggg文件与rc.d匹配的行,输出匹配行的行数
for filename in `seq $maxline`
do
read filename
#for循环中需要有if语句指定跳出循环的条件
if [ "$filename" = "rc0.d" ]
then
break
else
let "count +=1"
fi
done echo "$count times read"
#测试循环体外面的标准输入是否被重定向
echo -n "-----Pls. Input Data:-----"
read test
echo $test
代码块重定向标准输出, 重定向符号>
vi reif.sh
#!/bin/bash
#if/then结构的输出重定向到loggg文件
if [ -z "$1" ]
then
echo "Positional Parameter is NULL"
fi > loggg
#测试if/then结构之外的标准输出是否被重定向
echo "--------Normal Stdout------------"
./reif.sh
--------Normal Stdout------------
cat loggg
Positional Parameter is NULL