编写shell管理脚本(一)

7.1  查看当前linux系统中能够使用的shell程序的列表
[[email protected] ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/ksh
7.2  确认shell程序中存在的部分链接文件
[[email protected] ~]# 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
7.3  切换至tcsh程序的shell环境 ,并验证是否还能使用help内部指令和外部命令ls
[[email protected] ~]# 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环境
7.4  使用teacher用户登录系统,并将自己的登录shell更改为tcsh
[[email protected] ~]$ grep "teacher" /etc/passwd
teacher:505:505::/home/teacher:/bin/bash
[[email protected] ~]$ chsh
Changing shell for teacher.
Password:
New shell [/bin/bash]: /bin/tcsh
Shell changed.
[[email protected] ~]$ grep teacher /etc/passwd
teacher:505:505::/home/teacher:/bin/tcsh
7.5  由root用户使用usermod命令将teacher用户的登录shell重新修改为“/bin/bash”
[[email protected] ~]# usermod -s /bin/bash teacher
[[email protected] ~]# grep "teacher" /etc/passwd
teacher:505:505::/home/teacher:/bin/bash
7.6  使用“!wh”调用历史命令中最近一次以“wh”开头的命令并执行。
[[email protected] ~]# which fdisk
/sbin/fdisk
[[email protected] ~]# pwd
/root
[[email protected] ~]# !wh
which fdisk
/sbin/fdisk
7.7  查看用户最后执行的三条历史命令记录
[[email protected] ~]# history | tail -3
  119  pwd
  120  which fdisk
  121  history | tail -3
7.8  通过“!序号”的形式执行用户历史命令列表中的第119条命令
[[email protected] ~]# !119
pwd
/root
7.9  将所有用户记录历史命令的条数设置为200
[[email protected] ~]# vi /etc/profile
HISTSIZE=200
7.10  将用户jerry的历史命令记录的条数设置为5,重新选择后确认效果
[[email protected] ~]$ vi ~/.bash_profile
export HISTSIZE=5
[[email protected] ~]$ history | wc –l
5
7.11  使用teacher用户登录,执行“history –c” 命令已清空自己的命令历史记录。
[[email protected] ~]$ history | tail -2
   18  cd
   19  history | tail -2
[[email protected] ~]$ history -c
[[email protected] ~]$ history
1        history
7.12  查看已设置的所有命令别名
[[email protected] ~]# 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‘
7.13  使用预设的别名“ll”实现“ls -l”命令的功能
[[email protected] ~]# ll install.log
-rw-r--r-- 1 root root 36318 10-17 19:46 install.log
7.14  设置一个命令别名dir,以便执行“ls –ld –color=tty”的命令,并进行确认。
[[email protected] ~]# alias dir=‘/bin/ls -ld --color=tty‘
[[email protected] ~]# alias dir
alias dir=‘/bin/ls -ld --color=tty‘
[[email protected] ~]# dir install.log
-rw-r--r-- 1 root root 36318 10-17 19:46 install.log
7.15  取消上一步设置的dir命令别名。
[[email protected] ~]# unalias dir
[[email protected] ~]# alias dir
-bash: alias: dir: not found
7.16  取消用户当前环境中已设置的所有命令别名。
[[email protected] ~]# unalias -a
[[email protected] ~]# alias       //将查不到任何别名信息
7.17  查看teacher用户的身份信息,并将输出结果保存到文件“idtch.txt”中。
[[email protected] ~]# id teacher > idtch.txt
[[email protected] ~]# cat idtch.txt
uid=505(teacher) gid=505(teacher) groups=505(teacher)
7.18  查看jerry用户的身份信息,并追加到文件“idtch.txt”中,不覆盖文件的原有内容。
[[email protected] ~]# id jerry >> idtch.txt 
[[email protected] ~]# cat idtch.txt 
uid=505(teacher) gid=505(teacher) groups=505(teacher)
uid=507(jerry) gid=507(jerry) groups=507(jerry)
7.19  在文件“pw.txt”中保存初始密码“123456”,并使用该文件为jerry用户设置密码。
[[email protected] ~]# vi pw.txt
123456
[[email protected] ~]# passwd --stdin jerry < pw.txt
Changing password for user jerry.
passwd: all authentication tokens updated successfully.
7.20  尝试使用help命令查看ls命令的帮助信息时,由于ls并非内部命令,系统将会报错,通过“2>”操作符可以将报错信息重定向到指定的文件中。
[[email protected] ~]# help ls 2> err.log
[[email protected] ~]# cat err.log
-bash: help: no help topics match `ls‘.  Try `help help‘ or `man -k ls‘ or `info ls‘.
7.21  使用ls命令查看“/etc/password”文件(并不存在)和“/etc/passwd”文件的属性时,输出结果将同时包含标准输出和错误输出。测试进行分别重定向、合并重定向的结果。
[[email protected] ~]# ls -l /etc/password /etc/passwd > std.txt 2> err.log
[[email protected] ~]# cat std.txt
-rw-r--r-- 1 root root 2135 10-17 23:21 /etc/passwd
[[email protected] ~]# cat err.log
ls: /etc/password: 没有那个文件或目录
[[email protected] ~]# ls -l /etc/password /etc/passwd &> out.log
[[email protected] ~]# cat out.log
ls: /etc/password: 没有那个文件或目录
-rw-r--r-- 1 root root 2135 10-17 23:21 /etc/passwd
7.22  过滤出“/etc/inittab”文件中不以“#”号开头的行,并再次过滤出非空行,将结果重定向保存为“inittab.txt”文件。
[[email protected] ~]# grep -v "^#" /etc/inittab | grep -v "^$" > inittab.txt
[[email protected] ~]# cat inittab.txt
7.23  找出系统中使用Bash作为登录shell、名称以“ha”开头的用户账号,并只显示出用户名、登录shell两个字段的内容。
[[email protected] ~]# grep "bash" /etc/passwd | grep "^ha" | cut -d ":" -f 1,7
handy:/bin/bash
hackli:/bin/bash
7.24  查看当前系统的总内存空间、剩余可用内存空间(MB),去除其他无关信息。
[[email protected] ~]# free -m | head -2
             total       used       free     shared    buffers     cached
Mem:          1010        467        542          0         32        381
[[email protected] ~]# free -m | grep "Mem" | awk ‘{print $2,$4}‘
1010 542
7.25  新建立一个名为“DAY”的变量,初始内容设置为“sunday”。
[[email protected] ~]# DAY=Sunday
7.26  查看变量DAY的内容,比较使用“$”符号与不使用“$”符号的区别。
[[email protected] ~]# echo DAY
DAY
[[email protected] ~]# echo $DAY
Sunday
7.27  在变量DAY的内容后紧跟“MorningBus”字符串并在一起显示。
[[email protected] ~]# echo $DAYMorningBus    //错误引用
[[email protected] ~]# echo ${DAY}MorningBus
sundayMorningBus
7.28  确认变量DAY的内容,并使用双引号为TODAY变量赋值‘Today is $DAY’。

[[email protected] ~]# echo $DAY
sunday
[[email protected] ~]# TODAY="Today is $DAY"
[[email protected] ~]# echo $TODAY
Today is sunday
7.29  确认变量DAY的内容,并使用单引号为TODAY变量赋值‘Today is $DAY’。
[[email protected] ~]# echo $DAY
sunday
[[email protected] ~]# TODAY=‘Today is $DAY‘
[[email protected] ~]# echo $TODAY
Today is $DAY
7.30  统计当前登录到本地终端(tty1~tty6)中的用户数量,并将结果保存到变量UserNum中。
[[email protected] ~]# UserNum=`w | grep "tty" | wc -1`
[[email protected] ~]#echo $UserNum
3
7.31  用一行命令找出安装了fdisk程序的软件包名称(需要先确定fdisk程序的文件位置)。
[[email protected] ~]# rpm -qf `which fdisk`
util-linux-2.13-0.56.el5
7.32  通过find命令找出系统中hackli用户留下的文件或目录,并使用rm命令将其删除。
[[email protected] ~]# rm -rf `find /home -user hackli`
7.33  还是使用一行命令,将上一个例子的输出结果保存到变量FdiskPKG中。
[[email protected] ~]# FdiskPKG=$(rpm -qf $(which fdisk))
[[email protected] ~]# echo $FdiskPKG 
util-linux-2.13-0.56.el5
7.34  从键盘输入一整行数据,赋值给变量HELO,并确认HELO变量的内容。
[[email protected] ~]# read HELO
good morning ,teacher!     
[[email protected] ~]# echo $HELO 
good morning ,teacher!
7.35  从键盘输入一整行数据,依次赋值给变量G1、G2,并确认G1、G2变量的内容。
[[email protected] ~]# read G1 G2
good morning,teacher!
[[email protected] ~]# echo $G1
good
[[email protected] ~]# echo $G2
morning,teacher!
7.36  从键盘读入一个数值变量,并给出相应的提示信息。
[[email protected] ~]# read -p "please input a number:" YourNum
please input a number:501
[[email protected] ~]# echo $YourNum 
501
7.37  在当前shell环境中定义一个变量FILESVR,开启一个新的子shell进程(Bash或Zsh等),处于子shell环境中时将无法使用变量FILESVR的内容。
[[email protected] ~]# FILESVR=filesvr.benet.com
[[email protected] ~]# zsh
[[email protected] ~]# echo $FILESVR

[[email protected] ~]# exit
[[email protected] ~]# echo $FILESVR 
filesvr.benet.com
7.38  确认变量FILESVR的内容,并将其设置为全局变量,在子shell、当前shell环境中进行验证。
[[email protected] ~]# echo $FILESVR
filesvr.benet.com
[[email protected] ~]# export FILESVR 
[[email protected] ~]# zsh
[[email protected] ~]# echo $FILESVR    //在子shell环境中也可以使用该变量
filesvr.benet.com
[[email protected] ~]# exit
[[email protected] ~]# echo $FILESVR    //返回原shell环境中仍然能使用该变量
filesvr.benet.com
7.39  定义两个变量MONTH、YEAR,并将其设置为全局变量。
[[email protected] ~]# export MONTH=May YEAR=2009
[[email protected] ~]# echo $MONTH $YEAR
May 2009
7.40  清除已设置的变量DAY、MONTH、YEAR。
[[email protected] ~]# unset DAY MONTH YEAR
[[email protected] ~]# ECHO $DAY $MONTH $YEAR
-bash: ECHO: command not found
7.41  设置变量X、Y的值分别为34、12,依次计算变量X、Y的加减乘除及取模运算结果。
[[email protected] ~]#  expr $X + $Y
46
[[email protected] ~]# expr $X - $Y
22
[[email protected] ~]# expr $X \* $Y
408
[[email protected] ~]# expr $X / $Y
2
[[email protected] ~]# expr $X % $Y
10
7.42  计算变量X的值与数值“123”的和,并将计算结果重新赋值给变量X。
[[email protected] ~]# echo $X
34
[[email protected] ~]# X=`expr $X + 123`
[[email protected] ~]# echo $X
157
7.43  分页查看系统环境中设置的shell变量。
[[email protected] ~]# set | less
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
……//省略更多内容
7.44  以分号分隔,显示当前用户的用户名、宿主目录、登录shell。
[[email protected] ~]# echo "$USERHOMESHELL"
root:/root:/bin/bash
7.45  确认当前的命令搜索路径,并将“/opt/bin”目录添加到现有的搜索路径中去。
[[email protected] ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[[email protected] ~]# PATH="/opt/binPATH"
[[email protected] ~]# echo $PATH
/opt/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
7.46 在当前用户环境中,将用于限制历史命令条数的环境变量HISTSIZE的值改为24.
[[email protected] ~]# history | wc -l
229
[[email protected] ~]# export HISTSIZE=24
[[email protected] ~]# echo $HISTSIZE 
24
[[email protected] ~]# history | wc -l
24
7.47   编辑“~/.bash_profile”文件,修改PATH的设置,以便用户在下次登录后能够使用“/opt/bin”目录作为默认搜索路径。
[[email protected] ~]# vi ~/.bash_profile
PATH=$PATHHOME/bin:/opt/bin
Export PATH
7.48  验证预定义变量$0、$$、$?的作用。
[[email protected] ~]# bash              //开启一个新的进程
[[email protected] ~]# echo $0 $$         //显示当前的进程名称、PID号
bash 2040
[[email protected] ~]# exitt              //执行一个错误命令
bash: exxit: command not found        
[[email protected] ~]# echo $?           //返回值非0,表示上一条命令执行失败
127
[[email protected] ~]# exit
exit
[[email protected] ~]# echo $?           //返回值为0,表示上一条命令执行成功
0
7.49  确认系统服务脚本文件的数量和文件类型。
[[email protected] ~]# ls -l /etc/rc.d/init.d/* | wc -l
87
[[email protected] ~]# 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
7.50  查看系统中的网络服务脚本network文件的开头五行内容。
[[email protected] ~]# cat /etc/rc.d/init.d/network | head -5
#! /bin/bash
#
# network       Bring up/down networking
#
# chkconfig: 2345 10 90
7.51  使用vi编辑器编写一个简单的shell脚本文件repboot.sh,用于报告当前系统中“/boot”目录所占用的空间大小,并列出其中内核文件的属性信息。
[[email protected] ~]# 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-*
7.52  为上一步编写的脚本文件repboot.sh添加可执行权限。
[[email protected] ~]# ls -l repboot.sh
-rw-r--r-- 1 root root 164 10-18 08:02 repboot.sh
[[email protected] ~]# chmod a+x repboot.sh 
[[email protected] ~]# ls -l repboot.sh
-rwxr-xr-x 1 root root 164 10-18 08:02 repboot.sh
7.53  执行当前目录下的repboot.sh脚本程序文件。
[[email protected] ~]# ./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
7.54  使用bash解释器程序手动加载执行repboot.sh脚本文件中的语句。
[[email protected] ~]# 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
7.55  使用“.”命令读取repboot.sh脚本文件中的可执行语句,并在当前shell环境中运行。
[[email protected] ~]# . 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

时间: 2024-10-10 21:10:45

编写shell管理脚本(一)的相关文章

编写shell管理脚本(二)

8.1  先测试“/etc/vsftpd”.“/etc/hosts”是否为目录,并通过“$?”变量查看返回状态值,据此判断测试结果.[[email protected] ~]# [ -d /etc/vsftpd ][[email protected] ~]# echo $?0[[email protected] ~]# [ -d /etc/hosts ][[email protected] ~]# echo $?1[[email protected] ~]# ls -ld /etc/vsftpd

shell脚本的使用---if变量编写lamp管理脚本

注意实际操作时需根据实际情况对脚本做相应调整 1.安装httpd vi apache_install.sh #!/bin/bash rpm -e httpd httpd-manual --nodeps ls /root/httpd* if [ $? -eq 0 ];then  ##判断是否已经下载了httpd tar zxvf /root/httpd-2.2.17.tar.gz -C /usr/src/ cd /usr/src/httpd-2.2.17/ ./configure --prefix

看我如何利用Shell编写vsftpd管理软件

今天弄服务器的时候无意间用到此脚本,觉得当时写的虽然不咋样,但还是有点借鉴意义,就拿出来给大家看看.希望大家喜欢 先看看演示视频 看我如何利用Shell编写vsftpd管理软件 高清版下载: 百度云下载 OK然后我们来看看脚本的实现过程,时间有点久了当时的想法可能现在有点想不起来了,解释的不对的地方望见谅 脚本分为7个部分,这里我只做简单的解释 第一部分 脚本开始就利用awk提取日志中的用户名字段保存到tmp目录下的ftplog-userlist.txt文件中,方便后面查询 然后开始信息的展示,

linux软件管理之------编译安装nginx服务器并手动编写自动化运行脚本

红帽系列的 linux软件管理分为三类:1. rpm 安装软件.2. yum 安装软件.3. 源码包编译安装.前面两种会在相关专题给出详细讲解.源码包的编译安装是非常关键的,我们知道linux的相关版本非常多,相关的编译器,解释器也有很多,很多还有最小系统,嵌入式系统等等.同一功能的软件如果只有编译好的软件包,在其它linux的平台上,可能并不能正常安装运行,在此情况下,源码包编译安装出现了.所以本文的重点是以nginx为例,给出源码包编译安装的详细过程,同时带你手工编写自动化运行脚本. 准备工

为程序编写Service服务管理脚本

SaltStack通过Service方式管理服务,对于通用的服务,如mysql.apache.php等,自带service服务管理脚本,SaltStack可以方便管理.但是对于一些公司自有的服务,可能这些服务在开发之初,并没有考虑日后会采用Service脚本进行服务管理,为了统一Salt对服务的管理,我采用的方式是为每一个程序编写Service脚本. 这里主要注意以下两个问题: 1.这里有部分机器的优化,放在/etc/profile和/root/.bashrc中,而这两个文件在用户登陆的时候,会

编写shell脚本和执行

这次的学习内容: 认识shell,如何编写shell脚本和执行Shell 其实就是一个解释执行命令的程序,所谓shell编程其实就是用一定的语法将各种基本的命令组合起来,让shell程序去解释执行.如果对windows的dos有了解,可以这样理解,其实shell脚本文件和.bat批处理文件差不多.然而linux下的shell比起windows的dos强大很多,呵呵.为了安全起见,创建一个普通的账号进行学习]# useradd cnetsa]# passwd cnetsa然后使用 cnetsa 这

Linux系统编写shell脚本批量创建和删除用户

一.编写shell脚本批量添加用户 实现方法:判断用户是否存在,存在则返回错误提示,同时判断用户文件是否存在,不存在则退出 1.创建添加用户脚本 [[email protected] ~]# vim useradd.sh #!/bin/bashif [ $# -eq 0 ];then        echo "你没有输入任何文件!"        exit 1fi if [ ! -f $1 ];then        echo "输入有误!"        exit

安装apached源码包以及编写shell脚本使其启动更加方便,并且和启动系统服务相同

实验目的:安装apached源码包,编写apached启动脚本,使其像启动系统服务一样 实验要求:用shell编写启动脚本 实验环境:Linux系统以及apached源码包       httpd-2.2.25.tar.gz 源码包需要编译安装所以在安装源码包时,查看系统中是否已安装编译工具 make gcc gcc-c++  "开发工具" 等软件包. 解压软件包,解压在当前目录下. 编译源码包并且指定安装目录为/usr/local/apached目录下. 3.安装源码包. 4.查看端

转自ruby迷: 使用Net::SSH和Net::SCP编写Linux服务器管理脚本

试了一下perl下安装ssh模块,整了半天linux/window上都装不上,各依赖模块的版本总是匹配不上,后改了一下思路,用ruby吧 Net::SSH和Net::SCP是两个Ruby操作SSH的gem包.Net::SSH相当于cmd,专门用于执行命令:Net::SCP专门用于传输文件.它们俩结合,可以做任何SSH client能做的事情. 安装: gem install net-ssh gem install net-scp 以下所有代码都引用这段代码 require 'net/ssh' r