<--目录-->
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状态即退出