shell考试

1,使用source来执行脚本,相当于在一个shell下面执行脚本。互相可以可以调用。

  bash执行脚本,开启了一个新的shell,或者说是开启了一个子shell。

2,不加引号 解析变量

    单引号是所见即所得


双引号 解析变量

    反引号是输出的命令

3,$0 获取当前执行的shell脚本名

$n 获取当前执行的shell脚本的第n个参数值

$# 获取当前执行的shell脚本后面接的参数总个数

$* 获取当前脚本所有传参的参数

$@ 获取当前脚本所有传参的参数

$? 获取上一个指令的状态返回值

$$ 获取当前执行的shell脚本的进程号PID

$! 获取上一个在后台工作的进程的进程号PID

4 ${oldboy} 返回变量$oldboy的内容

{#oldboy} 返回变量$oldboy内容的长度

${oldboy:offset:length} 在变量$oldboy中从位置offset之后开始提取到length结尾的字符串

${oldboy#word} 从变量${oldboy}开头开始删除最短匹配的Word字符串

${oldboy##word} 从变量${oldboy}开头开始删除最长匹配的Word字符串

${oldboy%word}从变量${oldboy}结尾开始删除最短匹配的Word字符串

${oldboy%%word} 从变量${oldboy}结尾开始删除最长匹配的Word字符串

${oldboy/pattern/string} 使用string代替第一个匹配的pattern

${oldboy//pattern/string} 使用string代替所有的匹配的pattern

${oldboy:-word} 如果oldboy内容不存在,则使用word来替换

考试题

5:通过脚本传参的方式,检查 Web 网站 URL 是否正常(要求主体使用函数)

. /etc/init.d/functions

check_url(){

wget -q -o /dev/null -T 2 --tries=1 --spider $1

if [ $? -eq 0 ]

then

action "$1 is ok" /bin/true

else

action "$1 is no" /bin/false

fi

}

usage(){

echo "Usage: $0 url"

}

main(){

if [ $# -ne 1 ]

then

usage

fi

check_url $1

}

main $*

考试题 6:开发 Nginx 服务(编译安装)启动停止脚本,并分别通过 chkconfig(CentOS6)

和 systemctl(CentOS7)实现开机自启动

. /etc/init.d/functions

usage(){

      echo "Usage: $0 {start|stop|restart}"

}

start(){

    /application/nginx/sbin/nginx &>/dev/null

    if [ `netstat -lntup |grep nginx|wc -l` -eq 0 ]

    then

            action "nginx 开启失败" /bin/false

      else

            action "nginx 开启成功" /bin/true

      fi

}

stop(){

      /application/nginx/sbin/nginx -s stop &>/dev/null

      if [ `netstat -lntup |grep nginx|wc -l` -eq 0 ]

      then

              action "nginx 关闭成功" /bin/true

      else

              action "nginx 关闭失败" /bin/false

      fi

}

restart(){

      /application/nginx/sbin/nginx -s stop &>/dev/null

      /application/nginx/sbin/nginx &>/dev/null

      if [ `netstat -lntup |grep nginx|wc -l` -eq 0 ]

      then

            action "nginx 重启失败" /bin/false

      else

              action "nginx 重启成功" /bin/true

      fi

}

case $1 in

      start)

              start

              ;;

        stop)

              stop

                ;;

        restart)

              restart

              ;;

        *)

              usage

              ;;

esac

[root@web01 /etc/systemd/system]# cat nginxd2.service

[Unit]

Description=nginx

After=network.target

[Service]

Type=forking

ExecStart=/etc/init.d/nginxd2 start

ExecReload=/etc/init.d/nginxd2 restart

ExecStop=/etc/init.d/nginxd2 stop

PrivateTmp=true

[Install]

WantedBy=multi-user.target

考试题 7:猜数字游戏。首先让系统随机生成一个数字,给这个数字定一个范围(1-60),

让用户输入猜的数字,对输入进行判断,如果不符合要求,就给予高或低的提示,猜对后则

给出猜对用的次数

random="$((RANDOM%60))"

count=0

while true

do

    ((count++))

    read -p "请猜数字:" num

    if [ $num -gt $random ]

    then

        echo "猜高了。"

    elif [ $num -eq $random ]

    then

        echo "牛啊,猜对了,一共猜了${count}次。"

        exit

    else

        echo "猜低了。"

    fi

done                             

考试题 8:计算从 1 加到 100 之和(要求用 for 和 while,至少给出两种方法)

sum=0                                                                                                                   

for num in {1..100}

do

        ((sum+=num))

    done

    echo $sum

for ((i=1;i<=100;i++))                                                                                                 

do

        ((sum1+=i))

    done

    echo $sum1

考试题 9: 利用 bash for 循环打印下面这句话中字母数不大于 6 的单词(某企业面试真

题)。I am oldboy teacher welcome to oldboy training class

a="I am oldboy teacher welcome to oldboy training class"

for word in $a

do

    if [ `echo $word|wc -L` -le 6 ] ;then

        echo $word

    fi

done

考试题 10:使用 read 读入方式比较两个整数大小,要求对用户输入的内容严格判断是否为整数,是否输入了两个数字。

read -t 30 -p "请输入两个整数:" a b

expr $a + $b + 2 &>/dev/null

if [ $? -ne 0 ]

then

    echo "请输入两个整数。"

    exit

fi

[ -z "$b" ] && {

echo “请输入两个整数。”

exit

}

if [ $a -gt $b ]

then

    echo "$a > $b"

elif [ $a -eq $b ]

then

    echo "$a = $b"

else

    echo "$a < $b"

fi         

考试题 11:批量生成随机字符文件名案例

path=/oldboy

[ -d "$path" ] || mkdir -p "$path"

for n in `seq 10`

do

    random=`openssl rand -base64 40|sed 's#[^a-z]##g'|cut -c 2-11`

    touch $path/oldboy_${random}.html

done 

考试题 12:批量改名特殊案例

path="/oldboy"

[ -d $path ] && cd $path

for n in `ls`

do

    echo $n| awk -F "[_.]" '{print "mv",$0,"oldgirl_"$2".HTML"}'|bash

done   

rename oldboy oldgirl *.html && rename .html .HTML *.html

13,批量创建 10 个系统帐号 oldboy01-oldboy10 并设置密码(密码为随机 8 位数)

. /etc/init.d/functions

user="oldboy"

passfile="/tmp/user.log"

for num in `seq -w 10`

do

    pass="`echo "test$RANDOM"|md5sum|cut -c3-11`"

    useradd $user$num & >/dev/null &&\

        echo "$pass"|passwd --stdin $user$num & >/dev/null &&\

        echo -e "user:$user$num\tpasswd:$pass">>$passfile

    if [ $? -eq 0 ]

    then

        action "$user$num is ok" /bin/true

    else

        action "$user$num is fail" /bin/false

    fi

done

echo -----------------------

cat $passfile && >$passfile

考试题 14:解决 DOS 攻击生产案例

file=$1

awk '{print $1}' $1|grep -v "^$"|sort|uniq -c >/tmp/tmp.log

exec </tmp/tmp.log

while read line

do

      ip=`echo $line|awk '{print $2}'`

      count=`echo $line|awk '{print $1}'`

      if [ $count -ge 30 ] && [ `iptables -L -n|grep $ip|wc -l` -lt 1 ]

      then

      iptables -I INPUT -s $ip -j DROP

      echo "$ip is droped" >>/tmp/droplits_$(date +%F).log

      fi

done

执行方式 sh 14.sh access_2010-12-8.log

执行方式 sh 14.sh access_2010-12-8.log

考试题 15:菜单自动化软件部署经典案例

shu(){

      cat <<EOF

      1,install lamp

      2,install lnmp

      3,exit

EOF

        read -p "请输入数字安装程序" sum

        expr$sum+1 &>/dev/null

        if[  $? -ne 0 ]

        then

              echo  请输入数字 1, 2,3

              shu

        elif[  ${#sum} -lt 1 ]

        then

                echo 你未输入数字

                shu

          elif[  ${#sum} -eq 1 ]

          then

                lamp

          elif[  ${#sum} -eq 2 ]

          then

                lnmp               

          elif[  ${#sum} -eq 3 ]

          then

                tui

            fi

}

lnmp(){

        if [ -x /server/scripts/lnmp.sh ] && [ -f /server/scripts/lnmp.sh ]

        then

              . /server/scripts/lnmp.sh

              echo "start install lnmp"

              shu

        else

                echo "您的脚本有异常"

                shu

        fi

}

tui(){

      exit 0

}

main(){

        while true

        do

              shu

              amp

              lnmp

              tui

  done

}

main

考试题 16:批量检查多个网站地址是否正常

array=(http://blog.oldboyedu.com

      http://www.baidu.com

      http://oldboy.blog.51cto.com

      http://10.0.0.7

)

Wait(){

    echo -n "wait 10s

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

    do

        echo -n "."

        sleep 1

    done

    echo

}

CheckUrl(){

    wget -t 2 -T 5 --spider $1 &> /dev/null

    if [ $? -eq 0 ];then

        echo "check $1 is OK"

    else

        echo "check $1 is FAILED"

    fi

    return $?

}

main(){

    Wait

    for((i=0;i<${#array[*]};i++))

    do

        CheckUrl ${array[i]}

    done

    return $?

}

main $*   

1、按单词出现频率降序排序(不低于 3 种方法)

2、按字母出现频率降序排序(不低于 3 种方法)

tr ",. " "\n" <17.txt |sort |uniq -c|sort -nr

tr ",. " "\n" <17.txt |awk '{S[$1]++}END{for(k in S) print S[k],k}'|sort -nr

awk -F"[,. ]+" '{for(i=1;i<=NF;i++) S[$i]++}END{for(k in S) print S[k],k}' 17.txt|sort -nr

egrep -o "[a-Z]+" 17.txt |sort |uniq -c|sort -nr

egrep -o "[a-Z]+" 17.txt |awk '{S[$1]++}END{for(k in S) print S[k],k}'|sort -nr

1、按单词出现频率降序排序(不低于 3 种方法)

vim 17.txt

the squid project provides a number of resources to assist users

design,implement and support squid installations. Please browse the

documentation and support sections for more infomation,by oldboy training.

arr=(the squid project provides a number of resources to assist usersdesign,implement and

support squ

id installations. Please browse the documentation and support sections for more infomation,by

oldboy

training)

echo ===============NO.1================

for i in ${arr[*]}

do

    echo $i|sed 's#[^a-Z]##g'|grep -o '[^ ]' >>/tmp/1.txt

done

sort /tmp/1.txt|uniq -c|sort -nr

echo ===============NO.2================

tr ",. " "\n" <17.txt|grep -o '[^ ]'|sort|uniq -c|sort -nr

echo ===============NO.3================

tr "., " "\n" <17.txt|awk -F "" '{for(i=1;i<=NF;i++)S[$i]++}END{for(k in S)print S[k],k|"sort -nr"}'

考试题 19:已知:/etc/hosts 的内容为

192.168.1.11 oldboy11

192.168.1.21 oldboy21

192.168.1.31 oldboy31

请用 shell 脚本实现,怎么才能在输入 IP 后找到/etc/hosts 里对应的唯一的 hostname?

解答:

if [ $# -ne 1 ]

then

      echo "Usage: $0 + IP"

      exit 1

else

        hostname=`awk -F "[ ]+" -vn=$1 '$1==n{print $2}' /etc/hosts`

        if [ ${#hostname} -eq 0 ]

        then

                echo "not found $1 in /etc/hosts"

        else

                echo $hostname

        fi

fi

考试题 20:老男孩交流群某人发问如下

上海@Danny(122504707)21:54:37

请教一个问题

cat oldboy.txt

192.168.1.1 /hello1/b.do?bb=4

192.168.1.2 /hello2/a.do?ha=3

192.168.1.3 /hello3/r.do?ha=4

如何显示成以下效果

192.168.1.1 b.do

192.168.1.2 a.do

192.168.1.3 r.do

方法1

array=(

"192.168.1.1 /hello1/b.do?bb=4"

"192.168.1.2 /hello2/a.do?ha=3"

"192.168.1.3 /hello3/r.do?ha=4"

)

for n in "${array[@]}"

do

      echo $n|awk -F "[ /?]" '{print $1,$4}'

done

方法2

while  read line

do

      secho $line|awk -F "[ /?]" '{print $1,$4}'

done < 20.txt

方法3 直接

awk  -F  "[ /?]" '{print $1,$4}' 20.txt

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 1,551评论 0 0
  • 系统巡检脚本:Version 2016.08.09 ############################ 系统...
    NamasAmitabha阅读 1,295评论 0 0
  • 1.创建文件夹 !/bin/sh mkdir -m 777 "%%1" 2.创建文件 !/bin/sh touch...
    BigJeffWang阅读 10,012评论 3 53
  • Day28 作者:方维超 归档:课堂笔记 时间:2019/4/9 老男孩教育教学核心思想6重:重目标、重思路、重方...
    Ffvc阅读 298评论 0 1
  • 1、为什么要学习Shell编程? Linux系统中会大量的使用Shell,工作中我们也需要自动化实现业务, 例如:...
    放手吧_e512阅读 285评论 0 0