shell管理脚本

1.查看当前 linux 系统中能够使用的 shell 程序的列表
[root@localhost ~]# cat /etc/shells 
/bin/sh 
/bin/bash 
/sbin/nologin 
/bin/tcsh 
/bin/csh 
/bin/ksh
2.确认 shell 程序中存在的部分链接文件
[root@localhost ~]# ls -l /bin/*sh
-rwxr-xr-x 1 root root 735004 2008-10-21 /bin/bash
lrwxrwxrwx 1 root root 4 10-17 19:37 /bin/csh -> tcsh
lrwxrwxrwx 1 root root 21 10-17 19:37 /bin/ksh -> /etc/alternatives/ksh
lrwxrwxrwx 1 root root 4 10-17 19:35 /bin/sh -> bash
-rwxr-xr-x 1 root root 346756 2010-10-05 /bin/tcsh
3.切换至 tcsh 程序的 shell 环境 ,并验证是否还能使用 help 内部指令和外部 命令 ls
[root@localhost ~]# ksh
# help cd
ksh: help: not found [没有那个文件或目录]
# ls -l anaconda-ks.cfg
-rw------- 1 root root 1286 10-17 19:46 anaconda-ks.cfg
# exit //返回原来的 Bash环境
4.使用 teacher 用户登录系统,并将自己的登录 shell 更改为 tcsh
[teacher@localhost ~]$ grep "teacher" /etc/passwd
teacher:x:505:505::/home/teacher:/bin/bash
[teacher@localhost ~]$ chsh
Changing shell for teacher.
Password:
New shell [/bin/bash]: /bin/tcsh
Shell changed.
[teacher@localhost ~]$ grep teacher /etc/passwd
teacher:x:505:505::/home/teacher:/bin/tcsh

5.由 root 用户使用 usermod 命令将 teacher 用户的登录 shell 重新修改为 “/bin/bash
[root@localhost ~]# usermod -s /bin/bash teacher 
[root@localhost ~]# grep "teacher" /etc/passwd 
teacher:x:505:505::/home/teacher:/bin/bash 
6.使用“!wh”调用历史命令中最近一次以“wh”开头的命令并执行。
[root@localhost ~]# which fdisk 
/sbin/fdisk 
[root@localhost ~]# pwd 
/root 
[root@localhost ~]# !wh 
which fdisk 
/sbin/fdisk 
7.查看用户最后执行的三条历史命令记录
[root@localhost ~]# history | tail -3 
 119  pwd  
 120  which fdisk 
 121  history | tail -3 
8. 通过“!序号”的形式执行用户历史命令列表中的第 119 条命令
[root@localhost ~]# !119 
pwd 
/root 
9. 将所有用户记录历史命令的条数设置为 200
[root@localhost ~]# vi /etc/profile
HISTSIZE=200
10.将用户 jerry 的历史命令记录的条数设置为 5,重新选择后确认效果
[jerry@localhost ~]$ vi ~/.bash_profile export 
HISTSIZE=5 
[jerry@localhost ~]$ history | wc –l 
5 
11.使用 teacher 用户登录,执行“history –c” 命令已清空自己的命令历史记 录
[teacher@localhost ~]$ history | tail -2 
   18  cd 
   19  history | tail -2 
[teacher@localhost ~]$ history -c 
[teacher@localhost ~]$ history 
12.查看已设置的所有命令别名
[root@localhost ~]# alias alias cp='cp -i'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty' alias ls='ls --color=tty' alias mv='mv -i'
alias rm='rm -i'
alias vi='vim' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
13.使用预设的别名“ll”实现“ls -l”命令的功能
[root@localhost ~]# ll install.log 
-rw-r--r-- 1 root root 36318 10-17 19:46 install.log 
14.设置一个命令别名 dir,以便执行“ls –ld –color=tty”的命令,并进行确认
[root@localhost ~]# alias dir='/bin/ls -ld --color=tty' [root@localhost ~]# alias dir
alias dir='/bin/ls -ld --color=tty'
[root@localhost ~]# dir install.log
-rw-r--r-- 1 root root 36318 10-17 19:46 install.log
15. 取消上一步设置的 dir 命令别名
[root@localhost ~]# unalias dir
[root@localhost ~]# alias dir
-bash: alias: dir: not found
16.取消用户当前环境中已设置的所有命令别名
[root@localhost ~]# unalias -a
[root@localhost ~]# alias //将查不到任何别名信息
17.查看 teacher 用户的身份信息,并将输出结果保存到文件“idtch.txt”中
[root@localhost ~]# id teacher > idtch.txt [root@localhost ~]# cat idtch.txt
uid=505(teacher) gid=505(teacher) groups=505(teacher)
18.查看 jerry 用户的身份信息,并追加到文件“idtch.txt”中,不覆盖文件的 原有内容
[root@localhost ~]# id jerry >> idtch.txt [root@localhost ~]# cat idtch.txt
uid=505(teacher) gid=505(teacher) groups=505(teacher)
uid=507(jerry) gid=507(jerry) groups=507(jerry)
19.在文件“pw.txt”中保存初始密码“123456”,并使用该文件为 jerry 用户 设置密码
[root@localhost ~]# vi pw.txt
123456
[root@localhost ~]# passwd --stdin jerry < pw.txt
Changing password for user jerry.
passwd: all authentication tokens updated successfully
20.尝试使用 help 命令查看 ls 命令的帮助信息时,由于 ls 并非内部命令,系 统将会报错,通过“2>”操作符可以将报错信息重定向到指定的文件中
[root@localhost ~]# help ls 2> err.log 、
[root@localhost ~]# cat err.log
-bash: help: no help topics match `ls'. Try `help help' or `man -k ls' or `info ls'.
21.使用 ls 命令查看“/etc/password”文件(并不存在)和“/etc/passwd” 文件的属性时,输出结果将同时包含标准输出和错误输出。测试进行分别重定 向、合并重定向的结果
[root@localhost ~]# ls -l /etc/password /etc/passwd > std.txt 2> err.log
[root@localhost ~]# cat std.txt
-rw-r--r-- 1 root root 2135 10-17 23:21 /etc/passwd
[root@localhost ~]# cat err.log
ls: /etc/password: 没有那个文件或目录
[root@localhost ~]# ls -l /etc/password /etc/passwd &> out.log
[root@localhost ~]# cat out.log
ls: /etc/password: 没有那个文件或目录
-rw-r--r-- 1 root root 2135 10-17 23:21 /etc/passwd
22.过滤出“/etc/inittab”文件中不以“#”号开头的行,并再次过滤出非空 行,将结果重定向保存为“inittab.txt”文件
[root@localhost ~]# grep -v "^#" /etc/inittab | grep -v "^$" > inittab.txt 
[root@localhost ~]# cat inittab.txt
23.找出系统中使用 Bash 作为登录 shell、名称以“ha”开头的用户账号,并 只显示出用户名、登录 shell 两个字段的内容
[root@localhost ~]# grep "bash" /etc/passwd | grep "^ha" | cut -d ":" -f 1,7
handy:/bin/bash
hackli:/bin/bash
24. 查看当前系统的总内存空间、剩余可用内存空间(MB),去除其他无关信 息
[root@localhost ~]# free -m | head -2 
             total       used       free     shared    buffers     cached 
Mem:          1010        467        542          0         32        381 
[root@localhost ~]# free -m | grep "Mem" | awk '{print $2,$4}' 
1010 542 
25. 新建立一个名为“DAY”的变量,初始内容设置为“sunday”
[root@localhost ~]# DAY=Sunday 
26.查看变量 DAY 的内容,比较使用“$”符号与不使用“$”符号的区别
[root@localhost ~]# echo DAY
DAY
[root@localhost ~]# echo $DAY
Sunday
27.在变量 DAY 的内容后紧跟“MorningBus”字符串并在一起显示
[root@localhost ~]# echo $DAYMorningBus    //错误引用 
[root@localhost ~]# echo ${DAY}MorningBus 
sundayMorningBus 
28.确认变量 DAY 的内容,并使用双引号为 TODAY 变量赋值‘Today is $DAY’
[root@localhost ~]# echo $DAY
sunday
[root@localhost ~]# TODAY="Today is $DAY"
[root@localhost ~]# echo $TODAY
Today is sunday
29.确认变量 DAY 的内容,并使用单引号为 TODAY 变量赋值‘Today is $DAY’
[root@localhost ~]# echo $DAY
sunday
[root@localhost ~]# TODAY='Today is $DAY'
[root@localhost ~]# echo $TODAY
Today is $DAY
30. 统计当前登录到本地终端(tty1~tty6)中的用户数量,并将结果保存到变量 UserNum 中。
[root@localhost ~]# UserNum=`w | grep "tty" | wc -1` 
[root@localhost ~]#echo $UserNum 
3 
31. 用一行命令找出安装了 fdisk 程序的软件包名称(需要先确定 fdisk 程序的 文件位置)。
[root@localhost ~]# rpm -qf `which fdisk`
util-linux-2.13-0.56.el5
32.通过 find 命令找出系统中 hackli 用户留下的文件或目录,并使用 rm 命令 将其删除
[root@localhost ~]# rm -rf `find /home -user hackli` 
33.还是使用一行命令,将上一个例子的输出结果保存到变量 FdiskPKG 中。
[root@localhost ~]# FdiskPKG=$(rpm -qf $(which fdisk))
[root@localhost ~]# echo $FdiskPKG
util-linux-2.13-0.56.el5
34.从键盘输入一整行数据,赋值给变量 HELO,并确认 HELO 变量的内容。
[root@localhost ~]# read HELO
good morning ,teacher!
[root@localhost ~]# echo $HELO
good morning ,teacher!
35.从键盘输入一整行数据,依次赋值给变量 G1、G2,并确认 G1、G2 变量 的内容。
[root@localhost ~]# read G1 G2
good morning,teacher!
[root@localhost ~]# echo $G1
good
[root@localhost ~]# echo $G2
morning,teacher!
36.从键盘读入一个数值变量,并给出相应的提示信息。 
[root@localhost ~]# read -p "please input a number:" YourNum
please input a number:501
[root@localhost ~]# echo $YourNum
501
37. 在当前shell环境中定义一个变量FILESVR,开启一个新的子shell进程(Bash 或 Zsh 等),处于子 shell 环境中时将无法使用变量 FILESVR 的内容
[root@localhost ~]# FILESVR=filesvr.benet.com
[root@localhost ~]# zsh
[root@localhost ~]# echo $FILESVR [root@localhost ~]# exit
[root@localhost ~]# echo $FILESVR
filesvr.benet.com
38.确认变量 FILESVR 的内容,并将其设置为全局变量,在子 shell、当前 shell 环境中进行验证
[root@localhost ~]# echo $FILESVR
filesvr.benet.com
[root@localhost ~]# export FILESVR
[root@localhost ~]# zsh
[root@localhost ~]# echo $FILESVR //在子 shell 环境中也可以使用该变量 filesvr.benet.com
[root@localhost ~]# exit
[root@localhost ~]# echo $FILESVR //返回原 shell环境中仍然能使用该变量 filesvr.benet.com
39.定义两个变量 MONTH、YEAR,并将其设置为全局变量。
[root@localhost ~]# export MONTH=May YEAR=2009
[root@localhost ~]# echo $MONTH $YEAR
May 2009
40.清除已设置的变量 DAY、MONTH、YEAR
[root@localhost ~]# unset DAY MONTH YEAR
[root@localhost ~]# ECHO $DAY $MONTH $YEAR
-bash: ECHO: command not found
41.设置变量 X、Y 的值分别为 34、12,依次计算变量 X、Y 的加减乘除及取 模运算结果
[root@localhost ~]# expr $X + $Y
46
[root@localhost ~]# expr $X - $Y
22
[root@localhost ~]# expr $X \* $Y
408
[root@localhost ~]# expr $X / $Y
2
[root@localhost ~]# expr $X % $Y
10
42.计算变量 X 的值与数值“123”的和,并将计算结果重新赋值给变量 X。
[root@localhost ~]# echo $X
34
[root@localhost ~]# X=`expr $X + 123`
[root@localhost ~]# echo $X
157
43.分页查看系统环境中设置的 shell 变量
[root@localhost ~]# set | less BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
……//省略更多内容
44.以分号分隔,显示当前用户的用户名、宿主目录、登录 shell
[root@localhost ~]# echo "$USER:$HOME:$SHELL"
root:/root:/bin/bash
45. 确认当前的命令搜索路径,并将“/opt/bin”目录添加到现有的搜索路径 中去
[root@localhost ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:
/root/bin
[root@localhost ~]# PATH="/opt/bin:$PATH"
[root@localhost ~]# echo $PATH
/opt/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:
/usr/bin:/root/bin
46.在当前用户环境中,将用于限制历史命令条数的环境变量 HISTSIZE 的值改 为 24
[root@localhost ~]# history | wc -l
229
[root@localhost ~]# export HISTSIZE=24
[root@localhost ~]# echo $HISTSIZE
24
[root@localhost ~]# history | wc -l
24
47.编辑“~/.bash_profile”文件,修改 PATH 的设置,以便用户在下次登录 后能够使用“/opt/bin”目录作为默认搜索路径
[root@localhost ~]# vi ~/.bash_profile
PATH=$PATH:$HOME/bin:/opt/bin
Export PATH
48.验证预定义变量$0、$$、$?的作用
[root@localhost ~]# bash //开启一个新的进程
[root@localhost ~]# echo $0 $$ //显示当前的进程名称、PID 号
bash 2040
[root@localhost ~]# exitt //执行一个错误命令
bash: exxit: command not found
[root@localhost ~]# echo $? //返回值非 0,表示上一条命令执行失败
127
[root@localhost ~]# exit
exit
[root@localhost ~]# echo $? //返回值为 0,表示上一条命令执行成功
0
49.确认系统服务脚本文件的数量和文件类型
[root@localhost ~]# ls -l /etc/rc.d/init.d/* | wc -l
87
[root@localhost ~]# file /etc/rc.d/init.d/* | tail -2
/etc/rc.d/init.d/ypbind: Bourne-Again shell script text executable
/etc/rc.d/init.d/yum-updatesd: Bourne-Again shell script text executable
50.查看系统中的网络服务脚本 network 文件的开头五行内容。
[root@localhost ~]# cat /etc/rc.d/init.d/network | head -5
#! /bin/bash
#
# network Bring up/down networking
#
# chkconfig: 2345 10 90
51.使用 vi 编辑器编写一个简单的 shell 脚本文件 repboot.sh,用于报告当前 系统中“/boot”目录所占用的空间大小,并列出其中内核文件的属性信息
[root@localhost ~]# vi repboot.sh ~ ~ #!/bin/bash
#To show usage of /boot directory and mode of kernel file.
echo "Useage of /boot: "
du -sh /boot echo "The mode of kernel file:"
ls -lh /boot/vmlinuz-*
52.为上一步编写的脚本文件 repboot.sh 添加可执行权限。
[root@localhost ~]# ls -l repboot.sh
-rw-r--r-- 1 root root 164 10-18 08:02 repboot.sh
[root@localhost ~]# chmod a+x repboot.sh
[root@localhost ~]# ls -l repboot.sh
-rwxr-xr-x 1 root root 164 10-18 08:02 repboot.sh
53. 执行当前目录下的 repboot.sh 脚本程序文件
[root@localhost ~]# ./repboot.sh
Useage of /boot:
5.9M /boot
The mode of kernel file:
-rw-r--r-- 1 root root 1.9M 2010-12-20 /boot/vmlinuz-2.6.18-238.el5
54.使用 bash 解释器程序手动加载执行 repboot.sh 脚本文件中的语句。
[root@localhost ~]# bash repboot.sh Useage of /boot:
5.9M /boot
The mode of kernel file:
-rw-r--r-- 1 root root 1.9M 2010-12-20 /boot/vmlinuz-2.6.18-238.el5
55.使用“.”命令读取 repboot.sh 脚本文件中的可执行语句,并在当前 shell 环境中运行
 
 
[root@localhost ~]# . repboot.sh
Useage of /boot:
5.9M /boot The mode of kernel file:
-rw-r--r-- 1 root root 1.9M 2010-12-20 /boot/vmlinuz-2.6.18-238.el5









































 















猜你喜欢

转载自blog.csdn.net/xiaolong_4_2/article/details/80848922
今日推荐