shell脚本-题

1:用source执行脚本和用bash执行Shell脚本的区别是什么?

  source 执行脚本,其中的变量赋值是在当前shell的bash 执行脚本,其中的shell是在下一级的bash的所以,这个变量值,并不在当前shell中,而是在shell中

2:如何自定义环境变量?

  环境变量在 /etc/profile 或者 ~/.protfile 文件中定义,使用export 参数来定义环境变量同时,使用source或.命令让其生效。

3:定义变量内容,不加引号、单引号、双引号、反引号结果有什么不同?应该怎么用?

  单引号表示输入是什么,显示的就是什么(单引号将剥夺其中的所有字符的特殊含义)

  双引号为固定字符串,解决空格问题

  反引号表示输出的是命令执行的结构,同$()

4:请分别说出2个以上用于整数运算特殊符号或命令,以及适合小数运算的命令。

  整数:+ - let  

  小数:bc awk /

5:写出特殊变量对应的意义及应用

  $0、$n、$#、$*、$@、$?、$$、$!、$_

  $0  脚本名字

  $n  $1,$2...${10}

  $*  所有变量--字符串显示

  $@ 所有变量--列表形式

  $?  执行上一个指令的返回值的状态

  $!  执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)

  $$  脚本运行的当前进程ID号

  $_  显示shell使用的当前选项,与set功能相同

6:写出下面特殊变量扩展的意义

${test}、${#test}、${test:offset:length}、${test#word}、${test##word}、${test%word}

${test%word}、${test/pattern/string}、${test//pattern/string}、${test:-word}${test: -word}

  ${test}  变量调用

  ${#test}  调用变量的长度

  ${test#word}   从变量${test}开头开始删除最短匹配的word子串

  ${test##word}  从${test}开头开始删除最长匹配的word子串

  ${test%word}  从变量${test}结尾开始删除最短的匹配的word子串

  ${test%%word}  从变量${test}结尾开始,删除最长匹配的word子串

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

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

  ${test:-word}  如果test变量值为空,或未赋值,就回返回word字符替换变量值。

7:在条件测试与表达式中,[]和[[]]有何区别?

  [ 测试表达式 ]一条判断语句,如果是多个条件判断,使用-a -o来联合起来

  [[ 测试表达式 ]]多条语句的联合判断,使用 && || 来关联测试语句

8:说出适合在[]以及test中整数比较的特殊运算符号?

  -eq -en -lt -le -gt -ge

  -e -f -L -d -b -r -w -x

  -a -o !

  -z -n = !=

9、输出下面菜单

  1.install MySQL

  2.install Tomcat

  3.exit当用户选择对应的数字就开始安装对应的服务(可echo输出替代),需要对用户输入的数字进行判断是否为整数(用条件测试表达式实现)。

#!/bin/bash
# Author: 韩萌萌
# Blog: https://www.cnblogs.com/hmm01031007/
# Time: 2019-08-21 01:20:37
# Name: caidan.sh
# Version: v1.0
# Description: This is my Script.
cat << EOF
=====================
1.install MySQL
2.install Tomcat
3.exit
====================
EOF
read -p "请输入需要安装对应服务的数字:" num
expr $num + 1 &>/dev/null
if [ $? -ne 0 ];then
    echo "请输入需要安装对应服务的数字{1|2|3}"
    exit 1
fi
if [ $num -eq 1 ];then
    yum install MySQL
    exit 1
elif [ $num -eq 2 ];then
    yum install Tomcat
    exit 2
elif [ $num -eq 3 ];then
    echo exit
else
    echo "请输入一个整数"
fi

10、随机生成十个数进行大小比较,并打印最大数值(用条件表达式实现)。

#!/bin/bash
# Author: 韩萌萌
# Blog: https://www.cnblogs.com/hmm01031007/
# Time: 2019-08-21 22:36:45
# Name: suiji.sh
# Version: v1.0
# Description: This is my Script.
declare -a a
declare -i max=0
for i in `seq 0 9`;do
     a[$i]=$RANDOM
    [ ${a[$i]} -gt $max ] && max=${a[$i]}
done
echo ${a[@]}
echo "最大值为:$max"

11开发Shell脚本判断系统根分区剩余空间的大小并打印出来,如果利用率高于70%就提示“硬盘空间不足,否则提示“硬盘空间充足

#!/bin/bash
# Author: 韩萌萌
# Blog: https://www.cnblogs.com/hmm01031007/
# Time: 2019-08-21 17:12:32
# Name: disk.sh
# Version: v1.0
# Description: This is my Script.
num=`df -m |grep "/dev/mapper" |cut -d" " -f9 |sed "s/%//"`
if [ $num -gt 70 ];then
    echo "硬盘空间不足"
else
    echo "硬盘空间充足,利用率为$num%"
fi

12分别使用变量定义、read读入及脚本传参方式实现比较2个整数的大小。

#!/bin/bash
# Author: 韩萌萌
# Blog: https://www.cnblogs.com/hmm01031007/
# Time: 2019-08-24 23:06:36
# Name: compare.sh
# Version: v1.0
# Description: This is my Script.
read -p "请输入两个数字: " num1 num2
if [ $num1 -gt $num2 ];then
    echo "$num1大于$num2"
elif [ $num1 -lt $num2 ];then
    echo "$num1小于$num2"
else
    echo "$num1等于$num2"
fi

13打印一个菜单如下,当用户选择对应的数字时,就执行对应项的应用,最好对用户的输入进行是否为整数判断。

  1.install lamp

  2.install lnmp

  3.exit

#!/bin/bash
# Author: 韩萌萌
# Blog: https://www.cnblogs.com/hmm01031007/
# Time: 2019-08-21 18:02:52
# Name: menu.sh
# Version: v1.0
# Description: This is my Script.
read -p "请输入一个数字:" num
expr $num + 1 &>/dev/null
if [ $? -ne 0 ];then
echo "请输入:{1|2|3}"
exit 1
fi
if [ $num -eq 1 ];then
    yum install lamp
    exit 1
elif [ $num -eq 2 ];then
    yum install lnmp
    exit 2
elif [ $num -eq 3 ];then
    echo exit
fi

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

#!/bin/bash
# Author: 韩萌萌
# Blog: https://www.cnblogs.com/hmm01031007/
# Time: 2019-08-21 16:37:43
# Name: url.sh
# Version: v1.0
url=http://www.baidu.com
check_code(){
    status_code=$(curl -m 5 -s -o /dev/null -w %{http_code} $url)
}
while true;do
check_code
date=`date +%Y%m%d-%H:%M:%S`
echo "当前时间为:$date"
echo "$url服务器异常,状态码为$status_code.请尽快排查异常" >/tmp/http$$.pid
if [ $status_code -ne 200 ];then
    mail -s Warning root < /tmp/http$$.pid 
else
    echo "$url连接正常" >> /var/log/http.log
fi
sleep 5
done

15利用case语句开发Rsync服务启动停止脚本,并能通过chkconfig实现开机自启动。

16猜数字游戏。首先让系统随机生成一个数字,给这个数字定一个范围1-60),让用户输入猜的数字,对输入进行判断,如果不符合要求,就给予高或低的提示,猜对后则给出猜对用的次数,请用while语句实现。

#!/bin/bash
# Author: 韩萌萌
# Blog: https://www.cnblogs.com/hmm01031007/
# Time: 2019-08-21 16:42:54
# Name: caishuzi.sh
# Description: This is my Script. guess=$[$RANDOM % 60+1] declare -i count=1 while true;do read -p "请输入你猜的数字:" num if [ $num -lt $guess ];then echo "太小了!" elif [ $num -gt $guess ];then echo "太大了!" elif [ $num -eq $guess ];then echo "恭喜你猜对了,共猜了$count次" exit 0 fi let count++ done

17分析apache访问日志(自备),把日志中每行的访问字节数对应字段数字相加,计算出总的访问量。给出实现程序,请用while循环实现。

18、计算从1100中步长为3的所有数值之和(要求用for和while,至少给出两种方法)。

#!/bin/bash
# Author: 韩萌萌
# Blog: https://www.cnblogs.com/hmm01031007/
# Time: 2019-08-21 01:58:00
# Name: 100.sh
# Version: v1.0
# Description: 使用for循环写1-100步长为3的和..
declare -i sum=0
for i in `seq 1 3 100`;do
    sum=$[sum+i]
done
echo "1-100的和为:$sum"

#!/bin/bash
# Author: 韩萌萌
# Blog: https://www.cnblogs.com/hmm01031007/
# Time: 2019-08-21 02:02:12
# Name: 1001.sh
# Version: v1.0
# Description: 使用while循环写1-100步长为3的和.
declare -i i=1
declare -i sum=0
while  [ $i -le 100 ];do
    sum=$[sum+i]
        i=$i+3
done
echo "1-100的和为:$sum"

19、利用awk命令和bash for循环两种方式打印下面这句话中字母数不大于6的单词(某企业面试真题)。I am dfzy teacher welcome to dfzy training class

#!/bin/bash
# Author: 韩萌萌
# Blog: https://www.cnblogs.com/hmm01031007/
# Time: 2019-08-21 18:40:28
# Name: char.sh
# Version: v1.0
# Description: 使用for循环打印.
for i in I am dfzy teacher welcome to dfzy training class;do
    [ `echo $i|wc -L` -le 6 ] && echo $i
done

使用awk命令打印:

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

#!/bin/bash
# Author: 韩萌萌
# Blog: https://www.cnblogs.com/hmm01031007/
# Time: 2019-08-21 18:46:36
# Name: num.sh
# Version: v1.0
# Description: This is my Script.
read -p "请输入两个数:" num1 num2
str1=$num1
str2=$num2
[ -z "$str1" -o -z "$str2" ]&&echo "错误的输入,你可能只输入了一个数"&& exit 1
expr $str1 + 0 &>/dev/null
[ $? -ne 0 ] && echo "$str1必须是整数!"&&exit 2
expr $str2 + 0 &>/dev/null
[ $? -ne 0 ] && echo "$str2必须是整数!"&&exit 2
if [ $str1 -eq $str2 ];then
        echo "两个数相等"
elif [ $str1 -lt $str2 ];then
        echo "$str1小于$str2"
else
        echo "$str1大于$str2"
fi

原文地址:https://www.cnblogs.com/hmm01031007/p/11397925.html