shell编程基础经典常见问题及解答


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

 

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

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

 

当有嵌套调用脚本的时候,能把子shell脚本里面的变量传递过来,作为全局变量。

 

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

a. export OLDBOY=1

 

b.OLDGIRL=2

export OLDGIRL

 

c.declare

declare -x A=1

 

永久生效处理办法:

[root@web01 scripts]# tail -1 /etc/profile

export OLDBOY=1

[root@web01 scripts]# . /etc/profile

[root@web01 scripts]# echo $OLDBOY

1

 

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

 

a=test   #不加引号,也会解析变量,推荐连续数字用此方法。

a='test' #所见即所得。

a="test" #默认双引号,解析变量。

a=`date` #解析一个命令结果。就用``或$()。

 

 

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

 

整数:

(()) 推荐

let  推荐

$[]

expr

declare

小数:

bc

awk

 

结果示例:

 

 

 

 

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

 

$0  脚本名字(路径),比如启动脚本里传参

$n、 n个参数

$#、 参数的总个数

$*、 表示全部的参数,参数作为一个整体

$@、 表示全部的参数,但是参数是分开的个体

$?、 执行任务后的返回值,0表示没有问题

$$、 表示进程的pid,获取pid值,可以kill进程

$!、 表示上一个进程的Pid号

$_  表示前一个脚本的最后一个参数

 

 

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

 

${oldboy}   oldboy变量

${#oldboy}   变量的字符个数

${oldboy:offset:length} offset的位置截取,截取长度为lenth的值

${oldboy#word} 从变量内容的开头 删除含word的第一个字符

${oldboy##word} 从变量内容的开头 删除含word的全部字符

${oldboy%word} 从变量内容的尾部 删除含word的第一个字符

${oldboy%%word}   从变量内容的尾部 删除含word的全部字符

${oldboy/pattern/string} 对变量内容把第一个pattern替换为符合string

${oldboy//pattern/string}对变量内容把全部pattern替换为符合string

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

 

 

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

 

逻辑测试表达式中:

 

[]中 使用 -a -o

[[]]或(())里面 使用&& ||

 

此处还需总结了解下

 

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

 

 

 

 

考试题9、输出下面菜单

  1.install MySQL

  2.install Tomcat

  3.exit

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

 

 

 

#!/bin/sh

 

cat <<EOF

1.install MySQL

2.install Tomcat

3.exit

EOF

read -t 15 -p "请选择一个序号(必须是数字):" num

 

#判断输入的值是否为整数

expr 2 + $num &>/dev/null

if [ $? -ne 0 ]

then

echo "Usage:$0 {1|2|3}"

exit 1

fi

 

#执行选择的功能序号

 

if [ $num -eq 1 ]

then

echo "install MySQL ……"

 

elif [ $num -eq 2 ]

then

echo "install Tomcat ……"

 

elif [ $num -eq 3 ]

then

echo "bye."

exit

 

else

echo "Usage:$0 {1|2|3}"

exit 1

fi

 

 

考试题10、使用read读入方式比较两个整数大小(用条件表达式实现)。

 

#!/bin/bash

 

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

 

#1.判断是否为整数

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

if [ $? -ne 0 ]

then

echo "请输入两个整数。"

exit

fi

#2.表示第二个参数不能为空

[ -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


猜你喜欢

转载自blog.51cto.com/12083623/2338768