shell编写时的格式经验

【;】个人感觉可以有效减少脚本行数,尽管看上去不是很美。
e.g:
举个简单例子
脚本:
#!/bin/bash
echo "                            ######################"
echo "                            #     计算机信息     #"
echo "                            ######################"
echo  " "
echo  时间:
      date +%x%Z
echo  " "
echo  主机名:
      hostname
echo  " "
echo  机器型号:
      dmidecode |grep 'Product Name'|head -1
echo  " "
echo  SN号:
      dmidecode -s system-serial-number
echo  " "
echo  CPU信息:
      cat /proc/cpuinfo |grep 'model name' |uniq  #去掉重复
     #cat /proc/cpuinfo |grep 'model name' |head -1 #显示第一条
echo  CPU核数:
      cat /proc/cpuinfo |grep 'cpu cores' |wc -l
echo  " "
echo  内存使用情况:
      free -l
echo  " "
echo  磁盘状况:
      df -h
echo  " "
echo  操作系统版本:
      cat /etc/issue|head -1
echo  " "
echo  操作系统详情:
      uname -a
echo  " "
echo  运行状况:
      uptime
echo  " "
echo  网络信息:
      ifconfig |grep 'inet addr'|head -1
echo  " "
echo  运行的服务:
      netstat -lnp

与以下脚本是一样的

#!/bin/bash
echo "                            ######################"
echo "                            #     计算机信息     #"
echo "                            ######################"
echo  " "
echo  时间:
      date +%x%Z;echo  " ";echo  主机名:
      hostname;echo  " ";echo  机器型号:
      dmidecode |grep 'Product Name'|head -1;echo  " ";echo  SN号:
      dmidecode -s system-serial-number;echo  " ";echo  CPU信息:
      cat /proc/cpuinfo |grep 'model name' |uniq  #去掉重复
      #cat /proc/cpuinfo |grep 'model name' |head -1 #显示第一条
      echo  CPU核数:
      cat /proc/cpuinfo |grep 'cpu cores' |wc -l ;echo  " ";echo  内存使用情况:
      free -l;echo  " ";echo  磁盘状况:
      df -h;echo  " ";echo  操作系统版本:
      cat /etc/issue|head -1;echo  " ";echo  操作系统详情:
      uname -a;echo  " ";echo  运行状况:
      uptime;echo  " ";echo  网络信息:
      ifconfig |grep 'inet addr'|head -1;echo  " ";echo  运行的服务:
      netstat -lnp

但在命令的行数上却少了很多。这全是【;】的作用行数对比第二种21行,第一种43行。



【"】与【'】
Shell中的单引号和双引号的区别

单引号和双引号都能关闭shell对特殊字符的处理。

不同的是,双引号没有单引号严格:
单引号关闭所有有特殊作用的字符;
双引号只要求shell忽略大多数,下面3种特殊字符不被忽略:

①美元符号
②反引号
③反斜杠
不忽略美元符号意味着shell在双引号内部也进行变量名替换。

下面用一个简单的shell程序要说明一下。

[root@monitor test]# name=zhuzhu
[root@monitor test]# echo "$name"
zhuzhu
[root@monitor test]# echo '$name'
$name

【.】通常表示当前目录(或者是文件名的一部分)
e.g:

[root@monitor mj]# ls
a503
[root@monitor mj]# mv a ./b
[root@monitor mj]# ls
b

e.g:

[root@monitor mj]# cat cpfile
#!/bin/bash
cp /root/shell/* .
[root@monitor mj]# ls
cpfile
[root@monitor mj]# ./cpfile
[root@monitor mj]# ls
abc  cpfile  timesync.sh
[root@monitor mj]# ls /root/shell/
abc  timesync.sh

【\】转义符[反斜线, 即\]. 一种对单字符的引用机制. (取消特殊字符的作用)
[root@monitor test]# cat ceshi.sh
#!/bin/bash
name=zhuzhu
echo $name
[root@monitor test]# ./ceshi.sh
zhuzhu
如果修改为
#!/bin/bash
name=zhuzhu
echo \$name
[root@monitor test]# ./ceshi.sh
\$name