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、计算从1到100中步长为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
