shell常见问题文档格式.docx
- 文档编号:19910694
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:24
- 大小:22.91KB
shell常见问题文档格式.docx
《shell常见问题文档格式.docx》由会员分享,可在线阅读,更多相关《shell常见问题文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
3、用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到/dev目录下。
参考程序:
/bin/sh
FILENAME=
echo“Inputfilename:
”
readFILENAME
if[-c"
$FILENAME"
]
cp$FILENAME/dev
4.请为下列shell程序添加注释,并说明程序的功能和调用方法:
#/etc/
#Start/stop/restarttheApachewebserver.
#TomakeApachestartautomaticallyatboot,makethis
#fileexecutable:
chmod755/etc/
case"
$1"
in
'
start'
)
/usr/sbin/apachectlstart;
;
stop'
/usr/sbin/apachectlstop;
restart'
/usr/sbin/apachectlrestart;
*)
usage$0start|stop|restart"
;
esac
参考答案:
(1)程序注释
/bin/sh定义实用的shell
#/etc/注释行,凡是以星号开始的行均为注释行。
in#case结构开始,判断“位置参数”决定执行的操作。
本程序携带一个“位置参数”,即$1
)#若位置参数为start
#启动httpd进程
)#若位置参数为stop
#关闭httpd进程
#重新启动httpd进程
*)#若位置参数不是start、stop或restart时
#显示命令提示信息:
程序的调用方法
esac#case结构结束
(2)程序的功能是启动,停止或重新启动httpd进程
(3)程序的调用方式有三种:
启动,停止和重新启动。
5.设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。
i=1
groupaddclass1
while[$i-le30]
if[$i-le9];
USERNAME=stu0${i}
else
USERNAME=stu${i}
useradd$USERNAME
mkdir/home/$USERNAME
chown-R$USERNAME/home/$USERNAME
chgrp-Rclass1/home/$USERNAME
i=$(($i+1))
6.编写shell程序,实现自动删除50个账号的功能。
账号名为stud1至stud50。
while[$i-le50]
userdel-rstud${i}
i=$(($i+1))
7.某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:
(1)在下午4:
50删除/abc目录下的全部子目录和全部文件;
(2)从早8:
00~下午6:
00每小时读取/xyz目录下x1文件中每行第一个域的全部数据加入到/backup目录下的文件内;
(3)每逢星期一下午5:
50将/data目录下的所有目录和文件归档并压缩为文件:
;
(4)在下午5:
55将IDE接口的CD-ROM卸载(假设:
CD-ROM的设备名为hdc);
(5)在早晨8:
00前开机后启动。
参考答案:
解决方案:
(1)用vi创建编辑一个名为prgx的crontab文件;
prgx文件的内容:
5016***rm-r/abc/*
(2)、08-18/1***cut-f1/xyz/x1>
>
/backup/
(3)、5017***tarzcvf/data
(4)、5517***umount/dev/hdc
(5)、由超级用户登录,用crontab执行prgx文件中的内容:
root@xxx:
#crontabprgx;
在每日早晨8:
00之前开机后即可自动启动crontab。
----------------------------------------------
8.设计一个shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。
Shell程序fileback存放在/usr/bin目录下。
(1)编写shell程序fileback:
DIRNAME=`ls/root|grepbak`
if[-z"
$DIRNAME"
];
then
mkdir/root/bak
cd/root/bak
YY=`date+%y`
MM=`date+%m`
DD=`date+%d`
BACKETC=$YY$MM$
tarzcvf$BACKETC/etc
filebackfinished!
"
(2)编写任务定时器:
001**/bin/sh/usr/bin/fileback"
>
/root/etcbakcron
crontab/root/etcbakcron
或使用crontab-e命令添加定时任务:
01***/bin/sh/usr/bin/fileback
9.有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做?
(1)第一种方法:
用户应使用crontab–e命令创建crontab文件。
格式如下:
00**suncp–r/user/backup/tmp
(2)第二种方法:
用户先在自己目录下新建文件file,文件内容如下:
0**suncp–r/user/backup/tmp
然后执行crontabfile使生效。
10.设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:
读;
文件所有者的权限为:
读、写、执行;
文件所有者所在组的权限为:
读、执行。
建立程序Pro16如下:
while[i-le50]
if[-d/userdata];
mkdir-p-m754/userdata/user$i
加上-m754就不用写下面那一句了
-p是递归建立目录
#chmod754/userdata/user$i
user$i"
let"
i=i+1"
(或i=$(($i+1))
mkdir/userdata
mkdir-p-m/userdata/user$i
(或i=$(($i+1))
1)如何向脚本传递参数?
./scriptargument
例子:
显示文件名称脚本
./
cat
cat$1
2)如何在脚本中使用参数?
第一个参数:
$1,第二个参数:
$2
脚本会复制文件(arg1)到目标地址(arg2)
.//tmp/
cp$1$2
3)如何计算传递进来的参数?
$#
4)如何在脚本中获取脚本名称?
$0
5)如何检查之前的命令是否运行成功?
$?
6)如何获取文件的最后一行?
tail-1
7)如何获取文件的第一行?
head-1
8)如何获取一个文件每一行的第三个元素?
awk'
{print$3}'
9)假如文件中每行第一个元素是FIND,如何获取第二个元素
{if($1=="
FIND"
)print$2}'
10)如何调试bash脚本
将-xv参数加到#!
/bin/bash后
例子:
/bin/bash–xv
11)举例如何写一个函数?
functionexample{
Helloworld!
}
12)如何向连接两个字符串?
V1="
Hello"
V2="
World"
V3=${V1}${V2}
echo$V3
输出
HelloWorld
13)如何进行两个整数相加?
V1=1
V2=2
letV3=$V1+$V2
3
据@kashu的意见,本题的更佳回答为:
两个整数相加,还有若干种方法实现:
A=5
B=6
echo$(($A+$B))#方法2
echo$[$A+$B]#方法3
expr$A+$B#方法4
echo$A+$B|bc#方法5
BEGIN{print'
$A"
+'
$B"
}'
#方法6
14)如何检查文件系统中是否存在某个文件?
if[-f/var/log/messages]
Fileexists"
15)写出shell脚本中所有循环语法?
for循环:
foriin$(ls);
do
echoitem:
$i
while循环:
COUNTER=0
while[$COUNTER-lt10];
echoThecounteris$COUNTER
letCOUNTER=COUNTER+1
until循环:
COUNTER=20
until[$COUNTER-lt10];
echoCOUNTER$COUNTER
letCOUNTER-=1
16)每个脚本开始的#!
/bin/sh或#!
/bin/bash表示什么意思?
这一行说明要使用的shell。
/bin/bash表示脚本使用/bin/bash。
对于python脚本,就是#!
/usr/bin/python。
(LCTT译注:
这一行称之为释伴行。
17)如何获取文本文件的第10行?
head-10file|tail-1
18)bash脚本文件的第一个符号是什么
19)命令:
[-z"
]&
&
echo0||echo1的输出是什么
20)命令“export”有什么用?
使变量在子shell中可用。
21)如何在后台运行脚本?
在脚本后面添加“&
”。
据@kashu的意见,更好的答案是:
nohupcommand&
大部分时间我们可能是远程使用Linux,我碰到过由于网络断线使得在后台运行的command&
没了...
22)"
chmod500script"
做什么?
使脚本所有者拥有可执行权限。
23)"
重定向输出流到文件或另一个流。
24)&
和&
有什么区别
&
-希望脚本在后台运行的时候使用它
-当前一个脚本成功完成才执行后面的命令/脚本的时候使用它
25)什么时候要在[condition]之前使用“if”?
当条件满足时需要运行多条命令的时候。
26)命令:
name=John&
echo'
Mynameis$name'
的输出是什么
Mynameis$name
27)bashshell脚本中哪个符号用于注释?
28)命令:
echo${new:
-variable}的输出是什么
variable
29)'
和"
引号有什么区别?
'
-当我们不希望把变量转换为值的时候使用它。
"
-会计算所有变量的值并用值代替。
30)如何在脚本文件中重定向标准输出和标准错误流到文件?
在脚本文件中添加"
exec>
2>
1"
命令。
31)如何只用echo命令获取字符串变量的一部分?
echo${variable:
x:
y}
x-起始位置
y-长度
例子:
variable="
MynameisPetras,andIamdeveloper."
11:
6}#会显示Petras
32)如果给定字符串variable="
User:
123:
321:
/home/dir"
,如何只用echo命令获取home_dir?
echo${variable#*:
*:
或
echo${variable##*:
33)如何从上面的字符串中获取“User”?
echo${variable%:
*}
echo${variable%%:
34)如何使用awk列出UID小于100的用户?
awk-F:
$3<
100'
/etc/passwd
35)写程序为用户计算主组数目并显示次数和组名
cat/etc/passwd|cut-d:
-f4|sort|uniq-c|whilereadcg
{echo$c;
grep:
$g:
/etc/group|cut-d:
-f1;
}|xargs-n2
36)如何在bashshell中更改标准的域分隔符为"
:
?
IFS="
37)如何获取变量长度?
${#variable}
38)如何打印变量的最后5个字符?
-5}
39)${variable:
-10}和${variable:
-10}有什么区别?
${variable:
-10}-如果之前没有给variable赋值则输出10;
如果有赋值则输出该变量
-10}-输出variable的最后10个字符
40)如何只用echo命令替换字符串的一部分?
echo${variable100..3};
doecho$i;
done
for((i=0;
i<
=100;
i=i+3));
doecho"
Welcome$itimes"
50)如何打印传递给脚本的所有参数?
echo$*
echo$@
51)[$a==$b]和[$a-eq$b]有什么区别
[$a==$b]-用于字符串比较
[$a-eq$b]-用于数字比较
52)=和==有什么区别
=-用于为变量赋值
==-用于字符串比较
53)写出测试$a是否大于12的命令?
[$a-gt12]
54)写出测试$b是否小于等于12的命令?
[$b-le12]
55)如何检查字符串是否以字母"
abc"
开头?
[[$string==abc*]]
56)[[$string==abc*]]和[[$string=="
abc*"
]]有什么区别
[[$string==abc*]]-检查字符串是否以字母abc开头
[[$string=="
]]-检查字符串是否完全等于abc
57)如何列出以ab或xy开头的用户名?
egrep"
^ab|^xy"
/etc/passwd|cut-d:
-f1
58)bash中$!
表示什么意思?
后台最近执行命令的PID.
59)$?
前台最近命令的结束状态。
60)如何输出当前shell的PID?
echo$$
61)如何获取传递给脚本的参数数目?
echo$#
(LCTT译注:
和第3题重复了。
62)$*和$@有什么区别
$*-以一个字符串形式输出所有传递到脚本的参数
$@-以$IFS为分隔符列出所有传递到脚本中的参数
63)如何在bash中定义数组?
array=("
Hi"
my"
name"
is"
64)如何打印数组的第一个元素?
echo${array[0]}
65)如何打印数组的所有元素?
echo${array[@]}
66)如何输出所有数组索引?
echo${!
array[@]}
67)如何移除数组中索引为2的元素?
unsetarray[2]
68)如何在数组中添加id为333的元素?
array[333]="
New_element"
69)shell脚本如何获取输入的值?
a)通过参数
./scriptparam1param2
b)通过read命令
read-p"
DestinationbackupServer:
desthost
70)在脚本中如何使用"
expect"
/usr/bin/expect<
<
EOD
spawnrsync-ar${line}${desthost}:
${destpath}
expect"
*?
assword:
*"
send"
${password}\r"
expecteof
EOD
1、用sed修改的23行test为tset;
sed–i‘23s/test/tset/g’
2、查看/第25行第三列的内容。
sed–n‘25p’/|cut–d“”–f3
head–n25/|tail–n1|cut–d“”–f3
awk–F“”‘NR==23{print$3}’/
3、删除每个临时文件的最初三行。
sed–i‘1,3d’/tmp/*.tmp
4、脚本编程:
求100内的质数。
while[$i-le100];
ret=1
for((j=2;
j<
$i;
j++));
if[$(($i%$j))-eq0
];
ret=0
break
if[$ret-eq1];
echo-n"
$i"
i=$((i+1))
5、晚上11点到早上8点之间每两个小时查看一次系统日期与时间,写出具体配置命令
echo123,1-8/2***root/tmp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- shell 常见问题