<--目录-->

1)shell问答题

2)shell实战题


【shell问答题】

1、什么是shell?如何查看当前系统支持的Shell?

1)实现某种功能的,有执行权限的文件  2)cat /etc/shells


2、如何切换当前使用的shell

bash


3、/bin/bash特性有哪些

特性:提供命令补全,命令编辑和命令历史表等功能



4、用户配置文件是哪几个?有什么用?

1)~/.bashrc ~/.bash_profile

可以在里面定义变量,用户每打开一个终端时加载的文件,只针对用户有效


5、系统配置文件是哪几个?有什么用?

/etc/profile /etc/bashrc

可以在里面定义变量,用户每打开一个终端时加载的文件,针对所有用户生效


6、shell变量类型有哪些?列举出常用的4个预定义变量

1)1、自定义变量 2、系统环境变量 3、预定义变量 4、位置变量

2)$? $# $* $$


7、自定义变量的命名规则?

1、可以用数字字每下载线,但不能用数字开头和纯数字

2、同一个变量赋两个值,最后一个值生效

3、给变量赋值时,两边不能有空格

4、区分大小写


8、变量的生命周期,和作用范围?

1)在脚本里定义的变量,只在脚本执行过程中有效

2) 默认情况下只在当前Shell里可以使用,要想定义的Shell在所有的Shell里被使用,要把变量定义为全局变量


9、脚本的执行过程?脚本的执行方式?

1)从左到右 从上到下

2) sh xx.sh bash xx.sh /xx/xx/sh ./xx.sh


10、编写脚本的步骤?

1、明确脚本要实现的功能

2、需要使用哪些命令

3、需要使用哪些流程控制

4、数据是变化的,就要用变量来表示


11、Shell条件判断类型?

1、文件状态

2、数值比较

3、字符比较

4、逻辑比较



【实战题】

1、eval在shell中有什么作用?请举个例子说明?

   作用:

#!/bin/bash

aa=h1

bb=h2

var=(aa bb)

for vas in ${var[@]}

do

        echo $vas

        eval var_temp=\$${vas}

        echo $var_temp

done


2、dirname有什么作用?请举个例子说明?

   作用:获取当前脚本路径 

   例子:

   #!/bin/bash

cd `dirname $0`

pwd;ls


3、ssh -o stricthostkeychecking=no -o ConnectTimeout=60  分别代表什么意思?

   ssh加接时不需要输入key检查,然后六十秒为超时时间


4、说一下-n -z -d -f -e -r -w -x -l !-z在shell中分别代表什么意思?-n和-z试举一个例子说明

   -n 非空为真 

   -z 字符串为空为真 

   -d 是目录且存在为真 

   -f 是普通文件且存在为真 

   -e 存在为真

   -r 可读为真

   -w 可写为真

   -x 可执行为真

  -l 是链接为真

   !-z不为空

   1)-n例子:

   JavaApp=($(ps aux | grep "java" | grep "/app/guaji"))

   if [ -n "${JavaApp[0]}" ];then

    echo -e "\033[1;31m 脚本退出 \033[0m"

   exit 1

    fi

   2)-z例子:

   ssh=$(ssh -o StrictHostKeyChecking=no $2 "ls /")

   if [[ -z "$ssh" ]];then

echo -e "\033[1;31m \033[5m 远程主机($2)无法连接,脚本退出. \033[0m"

exit 1

   fi


5、正则表达式的 "|"、"\n"、"\r"、"\t"分别代表什么意思

|表示或的意思

         \n表示换行,将当前位移置下行开头

  \r回车,将当前位置移至本行开头 


6、写出获取公网IP的两种方法

ifconfig | grep -Po "(?<=addr:).*(?=Bcast)" | egrep -v '^192.168|^172.1[6-9].|^172.2[0-9].|^172.3[0-1].|^10.|^127.'

        /sbin/ifconfig | awk -F'[ :]+' '/inet addr:/ {print $4}' | egrep -v '^192.168|^172.1[6-9].|^172.2[0-9].|^172.3[0-1].|^10.|^127.'


7、$$表示什么意思?

   获取当前执行脚本的进程名  


8、函数内的local是什么意思?举一脚本例子说明

   脚本中局部变量,存在于脚本函数(function)中的变量称为局部变量,要以local方式进行声明,使之只在本函数作用域内有效,

   防止变量在函中的命名与变量外部程序中变量重名造成程序异常,下面是一脚本例子:

   #!/bin/sh

   a() {

        local s=1

        echo $s

   }

   b() {

        s=2

        echo $s

}

s=0

a

echo $s

b

echo $s


9、$@和$*的区别

   $@将命令行每个参数视为单独的字符串,等同于"$1"、"$2"、"$3"

   $*将所有的命令行所有参数视为单个字符串,等同于"$1$2$3"


10、$0、dirname和basename有什么作用?具个例子说明?

    作用:

    dirname获取脚本路径名

    basename获取脚本名

    $0获取脚本路径和脚本名

    例子:

    #!/bin/basha

    echo "####################"

    echo "# this is '$ 0' test#"

    echo "####################"

    echo $0 

    echo 

    echo "#########################"

    echo "# this is 'dirname' test#"

    echo "#####################@@@#"

    cd `dirname $0` && pwd

    echo

    echo "##########################"

    echo "# this is 'basename' test#"

    echo "##########################"

    echo `basename $0` 

 

11、取出3306端口号这个数字

    netstat -tlnp| grep 3306 | awk '[ :]+' '{print $5}' #[ :]+ 以空格和点为分隔符,这种分隔符有一个或多个


12、shell中单引号和双引号与不加与号分别代表什么意思

    单引号:可以说是所见即所得,即将单号引号的内容原样输出

    双引号:把双引号的内容输出出来,如果内容中有命令、变量等,会先把变量、命令解析出结果,然后再输出最终内容来

    无引号:把内容输出出来,会将含有空格的字符串视为一个整体输出,如果内容中有命令、变量等,会先把变量、命令解析出结果,

            然后再输出内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字

            路径等可以不加任何引号,不过最好用双引号替代之


13、echo -n 是什么意思?举一脚本例子显示他的功能

    -n不换行

       #!/bin/bash

. /etc/init.d/functions

echo "---------Please wait while we are checking-------------"

echo -n "6秒后执行该操作."

for ((i=0;i<6;i++))

do

       echo -n ".";sleep 2

        #[ $i -eq 3 ] && break

done

echo 

action "test success" /bin/true


14、echo -e "\n" | nohup ping www.baidu.com > filename 2>&1 &这里的-e 和 "\n" 是什么意思?

    -e是代表后面输入的内容包含特珠字符需要加的参数

    \n 是代表换行

  

15、有1-9的数字,echo输出1-9的数字时,屏蔽0-5的数字再输出

    echo '1234567890' | sed 's/[0-5]//g'


16、用nohup把一个脚本放在后台运行

    nohup sh test.sh > filename 2>&1 &

 

17、用seq打印10以空格分隔,用seq坚着打印10到1

    seq -s " " 10

    seq 10 -1 1


18、curl -I -s www.baidu.com | head -1 | wc -l 中的-I和-s代表什么意思

  curl -s -o /dev/null -w %{http_code} http://www.baidu.com

    -s 沉默或安静模式。不显示进度表或错误消息。使卷曲静音

    -I  只读取HTTP头! HTTP的服务器功能命令HEAD此用来获取  

    --connetct-timeout 2 2秒连接超时

   -o /dev/null 把捕获内容重定向到空

   -w %{http_code} -w自定义参数 %{http_code}为状态码的意思

 

19、wget -T 10 -c -q --spider www.baidu.com 这些参数分别代表什么意思?

    -T 超时10少

    -c 断点续传 

    -q 为执行命令时屏蔽他打印输出的意思,执行命令不会任何内容出来

    --spider wget命令加spider参数不会下载任何东西,spider的主要作用是测试下载链接。

    tries


20、生产环境常用的监控web的方法是哪种

    用wget或curl的方法作监控


21、生产环境写脚本报错就发邮件的命令是怎么样的

    mail -s "uname -n 's httpd status is on" [email protected] < $logfile


22、给文件改名

    mv $file 1linux-`echo $file | cut -d "-" -f2`   

    ls *.jpg | awk -F '_finished' '{print "mv " " $0" "$1".jpg"}' | bash


23、查看当前目录的所有文件夹

    ls -F | grep /


24、awk中的NF代表什么意思?

    NF代表结尾的意思


25、shell上: 0、1>、2>、>、2>&1、&>/dev/null分别代表什么意思

    0表示标准输入
    1>表示标准输出
    2>表示标准错误输出
    > 默认为标准输出重定向,与 1> 相同
    2>&1 意思是把 标准错误输出 重定向到 标准输出.
    &>/dev/null 意思是把 标准输出 和 标准错误输出 都重定向到空


26、set -e是什么意思?

    脚本里执行到非0状态即退出