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

wKiom1N8u_uR88k1AAJoE5P1RUI413.jpg 

 

2. 写一个脚本,使用for循环修改目录/tmp/1.dir/tmp/2.dir/tmp/3.dir的最近一次修改时间为201033333

 

参见(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

wKiom1N8v0Xh8G1vAAh4ZALtCTI322.jpg 

 

此脚本也可以写成如下形式,其结果是一样的:

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

wKioL1N8vDSC7OoEAAVaRpn0nI0536.jpg

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