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