1. shell脚本中,怎么做可以把某一行给注释掉?

在该行的最前面加一个警号#


2. 如何执行一个shell脚本呢?

bash  1.sh 或者 chmod +x 1.sh; ./1.sh


3. 为了方便管理,我们约定把shell脚本都放到哪个目录下?

放到 /usr/local/sbin/下


4. 为了更好的调试shell脚本,我们可以加一个选项来观察shell脚本的执行过程,是哪个选项呢?

bash -x 1.sh


5. 使用date命令打印5天前的日期,要求日期格式为: xxxx-xx-xx

date -d "5 days ago" +%Y-%m-%d  
或者 date -d "-5 day" +%F


6. 请判断,阿铭的脚本哪里有问题?

#! /bin/bash

a = 1
b = 2
echo $a, $b

赋值变量值的时候,带了空格


7. shell脚本中如何使用数学运算?请举例说明。

a=1; b=2
c=$[$a+$b]
echo $c


8. shell脚本中有一个命令可以实现脚本和用户交互,请问是哪个命令,怎么使用?

read -p 
例如  
read -p "Please input a number" n
这样会把用户输入的内容作为n这个变量的值


9. 在shell中如何进行大小或者等于判断?

大于 -gt  小于是 -lt 等于是 -ne 大于等于是 -ge 小于等于是 -le 格式如下:
if [ $a -ge 0 ]; then ... ;fi


10. shell脚本中,用什么符号表示并且,用什么符号表示或者?

&& 并且
|| 或者


11. shell脚本中,case逻辑判断的结构是什么样的?

case $a in 
    1)
        command
    ;;
    2)
        command
    ;;
    *)
        command
    ;;
esac


12.  列举出shell脚本中常用的循环结构。

for a in ... ; do ... ; done
while ...; do ...; done


13. shell脚本中函数的作用是什么?函数结构是什么样的?

函数可以理解成shell脚本中一个小代码单元,当要用到这段代码时直接调用函数名即可,从而避免重复书写这段代码,提高代码书写效率和质量。

函数的结构为

function fu_name() {
.....
}


14. 写脚本实现,把一个目录下的所有文件(不含有目录)全部在文件名后面加一个.bak

#! /bin/bash

for f in `find . -type f`; do mv $f $f.bak; done

#! /bin/bash


for i in `ls`; do
  if [ -f $i ]; then
    mv $i $i.bak
  fi
done


15. 编写一个shell脚本,将当前目录下大小大于100K的文件全部移动到/tmp/ 目录下。

for f in `find . -type f -size +100K`; do mv $f /tmp/ ; done


16. 写一个小脚本,获取本机的HOSTNAME、IP地址以及DNS地址。

标准答案版:

#!/bin/bash

    hostname=`hostname`
    echo "hostname : " $hostname
    ip=`/sbin/ifconfig -a | grep 'inet addr' | awk -F ':' '{print $2}' | awk '{print $1}'`
   for i in $ip
      do
          echo  "`ifconfig | grep -B1 "$i" | grep -v 'inet addr' | awk '{print $1}'` "$i""
     done
    DNS=`cat /etc/resolv.conf |grep nameserver|grep -v '#'`
    echo  $DNS

个人版本:

#! /bin/bash


hostname=`echo $HOSTNAME`
IP=`ifconfig eth0 |sed -n '2'p |awk '{print $2}'|awk -F':' '{print $2}'`
dns=`cat /etc/resolv.conf |grep 'nameserver' |awk '{print $2}' |sed -n '1'p`

echo "hostname=$hostname"
echo "IP=$IP"
echo "dns=$dns"


17. 写两个小脚本验证break和continue在循环中的作用。

shell脚本:

#! /bin/bash


echo "===Test 'break'==="
for i in `seq 1 5`; do
  if [ $i -eq 3 ]; then
    break
  else
    echo $i
  fi
done


echo "===Test 'continue'==="
for i in `seq 1 5`; do
  if [ $i -eq 3 ]; then
    continue
  else
    echo $i
  fi
done

执行结果:

===Test 'break'===
1
2
===Test 'continue'===
1
2
4
5