例1. 写一个脚本,使用for循环创建目录/tmp/1.dir,/tmp/2.dir和/tmp/3.dir,并将它们的权限均修改为750;
使用mkdir 命令创建目录,使用chmod 命令修改权限,故此脚本可以写成:
#!/bin/bash for DirName in /tmp/1.dir /tmp/2.dir /tmp/3.dir; do mkdir $DirName chmod 750 $DirName done
例2. 写一个脚本,使用for循环修改目录/tmp/1.dir,/tmp/2.dir和/tmp/3.dir的最近一次修改时间为2010年3月3号3点3分3秒;
参见(10_Linux基础知识及命令————创建和删除文本文件)中touch命令的用法:
touch -m -t [CC]YYMMDDhhmm.ss 可以用来修改文件的修改时间到一个指定的时间,故此脚本可以写成:
#!/bin/bash for Dir in /tmp/1.dir /tmp/2.dir /tmp/3.dir; do stat $Dir touch -m -t 201003030303.03 $Dir stat $Dir done unset Dir
此脚本也可以写成如下形式,其结果是一样的:
for Dir in 1.dir 2.dir 3.dir; do touch -m -t 201003030303.03 /tmp/$Dir done
例3:写一个脚本,使用for循环统计/etc/fstab、/etc/rc.d/rc.sysinit、/etc/inittab文件中各自以#开头的行的行数;
要统计#开头的行,可以使用grep命令,然后通过管道将选出的行传输给 wc 命令,其核心代码为:grep “^#” /etc/fstab | wc -l, 故此脚本可以写成:
#nano showlines.sh #!/bin/bash for File in /etc/fstab /etc/rc.d/rc.sysinit /etc/inittab; do grep "^#" $File | wc -l done
——————————————执行结果——————————————
[root@localhost ~]# chmod +x showlines.sh [root@localhost ~]# ./showlines.sh 7 44 25 [root@localhost ~]#
这里可以看到执行结果只有统计数据,但没有指明该数据属于哪个文件,故可以对showlines.sh加以改进:
#!/bin/bash for File in /etc/fstab /etc/rc.d/rc.sysinit /etc/inittab; do LINES=`grep "^#" $File | wc -l` # 将 grep "^#" $File | wc -l 的执行结果保存为一个变量 LINES echo "$File: $LINES" done
由于变量LINES只使用了一次,所以该脚本还可以精简成如下形式:
#!/bin/bash for File in /etc/fstab /etc/rc.d/rc.sysinit /etc/inittab; do echo "$File: `grep "^#" $File | wc -l`" done
例4:写一个脚本,使用for循环统计/etc/fstab、/etc/rc.d/rc.sysinit、/etc/inittab文件中各自以#开头的行的行数和空白行数;
统计#开头的行可以沿用上一个例子中的语句,统计空白行则可以使用 grep “^$” FileName来操作,故此脚本可以写成:
# nano show_space_line.sh
#!/bin/bash for File in /etc/fstab /etc/rc.d/rc.sysinit /etc/inittab; do echo “$File:” echo “# lines: `grep “^#” $File | wc -l`” echo “space lines: `grep “^$” $File | wc -l`” done unset File
—————————————执行结果—————————————
[root@localhost ~]# ./show_space_line.sh /etc/fstab: # lines: 7 space line: 1 /etc/rc.d/rc.sysinit: # lines: 44 space line: 96 /etc/inittab: # lines: 25 space line: 0
这里可以看到执行结果顶格显示,不是很美观。为了提高用户体验,可以在显示时加上table键的效果。“\t”在字符串中表示转义为table键效果,echo命令的-e选项,可以用来实现转义,故可修改上述脚本:
# nano show_space_line.sh
#!/bin/bash for File in /etc/fstab /etc/rc.d/rc.sysinit /etc/inittab; do echo "$File:" echo -e "\t# lines: `grep "^#" $File | wc -l`" echo -e "\tspace lines: `grep "^$" $File | wc -l`" done
—————————————执行结果—————————————
[root@localhost ~]# ./show_space_line.sh /etc/fstab: # lines: 7 space lines: 1 /etc/rc.d/rc.sysinit: # lines: 44 space lines: 96 /etc/inittab: # lines: 25 space lines: 0
例5:写一个脚本,使用for循环分别将/proc/cpuinfo、/proc/meminfo、/proc/uptime三个文件中的所有小写字符显示为大写;
使用tr命令可以实现字符的转换,故此脚本可以写成:
# nano upcase_lowercase.sh #!/bin/bash for File in /proc/cpuinfo /proc/meminfo /proc/uptime; do tr 'a-z' 'A-Z' < $File done unset File
—————————————执行结果—————————————
[root@localhost ~]# ./upcase_lowercase.sh PROCESSOR : 0 VENDOR_ID : GENUINEINTEL CPU FAMILY : 6 MODEL : 42 MODEL NAME : INTEL(R) CORE(TM) I5-2430M CPU @ 2.40GHZ STEPPING : 7 CPU MHZ : 2373.581 CACHE SIZE : 6144 KB FPU : YES FPU_EXCEPTION : YES CPUID LEVEL : 5 WP : YES FLAGS : FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 CLFLUSH MMX FXSR SSE SSE2 SYSCALL NX RDTSCP LM CONSTANT_TSC UP REP_GOOD PNI MONITOR SSSE3 LAHF_LM BOGOMIPS : 4747.16 CLFLUSH SIZE : 64 CACHE_ALIGNMENT : 64 ADDRESS SIZES : 36 BITS PHYSICAL, 48 BITS VIRTUAL POWER MANAGEMENT: MEMTOTAL: 1020348 KB MEMFREE: 63268 KB BUFFERS: 82580 KB CACHED: 502952 KB SWAPCACHED: 8 KB ACTIVE: 409980 KB INACTIVE: 407476 KB ACTIVE(ANON): 118524 KB INACTIVE(ANON): 119176 KB ACTIVE(FILE): 291456 KB INACTIVE(FILE): 288300 KB UNEVICTABLE: 0 KB MLOCKED: 0 KB SWAPTOTAL: 2064376 KB SWAPFREE: 2064368 KB DIRTY: 28 KB WRITEBACK: 0 KB ANONPAGES: 231908 KB MAPPED: 61856 KB SHMEM: 5776 KB SLAB: 92732 KB SRECLAIMABLE: 35400 KB SUNRECLAIM: 57332 KB KERNELSTACK: 1936 KB PAGETABLES: 27884 KB NFS_UNSTABLE: 0 KB BOUNCE: 0 KB WRITEBACKTMP: 0 KB COMMITLIMIT: 2574548 KB COMMITTED_AS: 809988 KB VMALLOCTOTAL: 34359738367 KB VMALLOCUSED: 7764 KB VMALLOCCHUNK: 34359716552 KB HARDWARECORRUPTED: 0 KB ANONHUGEPAGES: 65536 KB HUGEPAGES_TOTAL: 0 HUGEPAGES_FREE: 0 HUGEPAGES_RSVD: 0 HUGEPAGES_SURP: 0 HUGEPAGESIZE: 2048 KB DIRECTMAP4K: 8128 KB DIRECTMAP2M: 1040384 KB 443467.39 440186.86