zoukankan      html  css  js  c++  java
  • 编写shell管理脚本(一)

    7.1  查看当前linux系统中能够使用的shell程序的列表
    [root@localhost ~]# cat /etc/shells
    /bin/sh
    /bin/bash
    /sbin/nologin
    /bin/tcsh
    /bin/csh
    /bin/ksh
    7.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
    7.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环境
    7.4  使用teacher用户登录系统,并将自己的登录shell更改为tcsh
    [teacher@localhost ~]$ grep "teacher" /etc/passwd
    teacher: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:505:505::/home/teacher:/bin/tcsh
    7.5  由root用户使用usermod命令将teacher用户的登录shell重新修改为“/bin/bash”
    [root@localhost ~]# usermod -s /bin/bash teacher
    [root@localhost ~]# grep "teacher" /etc/passwd
    teacher:505:505::/home/teacher:/bin/bash
    7.6  使用“!wh”调用历史命令中最近一次以“wh”开头的命令并执行。
    [root@localhost ~]# which fdisk
    /sbin/fdisk
    [root@localhost ~]# pwd
    /root
    [root@localhost ~]# !wh
    which fdisk
    /sbin/fdisk
    7.7  查看用户最后执行的三条历史命令记录
    [root@localhost ~]# history | tail -3
      119  pwd
      120  which fdisk
      121  history | tail -3
    7.8  通过“!序号”的形式执行用户历史命令列表中的第119条命令
    [root@localhost ~]# !119
    pwd
    /root
    7.9  将所有用户记录历史命令的条数设置为200
    [root@localhost ~]# vi /etc/profile
    HISTSIZE=200
    7.10  将用户jerry的历史命令记录的条数设置为5,重新选择后确认效果
    [jerry@localhost ~]$ vi ~/.bash_profile
    export HISTSIZE=5
    [jerry@localhost ~]$ history | wc –l
    5
    7.11  使用teacher用户登录,执行“history –c” 命令已清空自己的命令历史记录。
    [teacher@localhost ~]$ history | tail -2
       18  cd
       19  history | tail -2
    [teacher@localhost ~]$ history -c
    [teacher@localhost ~]$ history
    1        history
    7.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'
    7.13  使用预设的别名“ll”实现“ls -l”命令的功能
    [root@localhost ~]# ll install.log
    -rw-r--r-- 1 root root 36318 10-17 19:46 install.log
    7.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
    7.15  取消上一步设置的dir命令别名。
    [root@localhost ~]# unalias dir
    [root@localhost ~]# alias dir
    -bash: alias: dir: not found
    7.16  取消用户当前环境中已设置的所有命令别名。
    [root@localhost ~]# unalias -a
    [root@localhost ~]# alias       //将查不到任何别名信息
    7.17  查看teacher用户的身份信息,并将输出结果保存到文件“idtch.txt”中。
    [root@localhost ~]# id teacher > idtch.txt
    [root@localhost ~]# cat idtch.txt
    uid=505(teacher) gid=505(teacher) groups=505(teacher)
    7.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)
    7.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.
    7.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'.
    7.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
    7.22  过滤出“/etc/inittab”文件中不以“#”号开头的行,并再次过滤出非空行,将结果重定向保存为“inittab.txt”文件。
    [root@localhost ~]# grep -v "^#" /etc/inittab | grep -v "^$" > inittab.txt
    [root@localhost ~]# cat inittab.txt
    7.23  找出系统中使用Bash作为登录shell、名称以“ha”开头的用户账号,并只显示出用户名、登录shell两个字段的内容。
    [root@localhost ~]# grep "bash" /etc/passwd | grep "^ha" | cut -d ":" -f 1,7
    handy:/bin/bash
    hackli:/bin/bash
    7.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
    7.25  新建立一个名为“DAY”的变量,初始内容设置为“sunday”。
    [root@localhost ~]# DAY=Sunday
    7.26  查看变量DAY的内容,比较使用“$”符号与不使用“$”符号的区别。
    [root@localhost ~]# echo DAY
    DAY
    [root@localhost ~]# echo $DAY
    Sunday
    7.27  在变量DAY的内容后紧跟“MorningBus”字符串并在一起显示。
    [root@localhost ~]# echo $DAYMorningBus    //错误引用
    [root@localhost ~]# echo ${DAY}MorningBus
    sundayMorningBus
    7.28  确认变量DAY的内容,并使用双引号为TODAY变量赋值‘Today is $DAY’。

    [root@localhost ~]# echo $DAY
    sunday
    [root@localhost ~]# TODAY="Today is $DAY"
    [root@localhost ~]# echo $TODAY
    Today is sunday
    7.29  确认变量DAY的内容,并使用单引号为TODAY变量赋值‘Today is $DAY’。
    [root@localhost ~]# echo $DAY
    sunday
    [root@localhost ~]# TODAY='Today is $DAY'
    [root@localhost ~]# echo $TODAY
    Today is $DAY
    7.30  统计当前登录到本地终端(tty1~tty6)中的用户数量,并将结果保存到变量UserNum中。
    [root@localhost ~]# UserNum=`w | grep "tty" | wc -1`
    [root@localhost ~]#echo $UserNum
    3
    7.31  用一行命令找出安装了fdisk程序的软件包名称(需要先确定fdisk程序的文件位置)。
    [root@localhost ~]# rpm -qf `which fdisk`
    util-linux-2.13-0.56.el5
    7.32  通过find命令找出系统中hackli用户留下的文件或目录,并使用rm命令将其删除。
    [root@localhost ~]# rm -rf `find /home -user hackli`
    7.33  还是使用一行命令,将上一个例子的输出结果保存到变量FdiskPKG中。
    [root@localhost ~]# FdiskPKG=$(rpm -qf $(which fdisk))
    [root@localhost ~]# echo $FdiskPKG 
    util-linux-2.13-0.56.el5
    7.34  从键盘输入一整行数据,赋值给变量HELO,并确认HELO变量的内容。
    [root@localhost ~]# read HELO
    good morning ,teacher!     
    [root@localhost ~]# echo $HELO 
    good morning ,teacher!
    7.35  从键盘输入一整行数据,依次赋值给变量G1、G2,并确认G1、G2变量的内容。
    [root@localhost ~]# read G1 G2
    good morning,teacher!
    [root@localhost ~]# echo $G1
    good
    [root@localhost ~]# echo $G2
    morning,teacher!
    7.36  从键盘读入一个数值变量,并给出相应的提示信息。
    [root@localhost ~]# read -p "please input a number:" YourNum
    please input a number:501
    [root@localhost ~]# echo $YourNum 
    501
    7.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
    7.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
    7.39  定义两个变量MONTH、YEAR,并将其设置为全局变量。
    [root@localhost ~]# export MONTH=May YEAR=2009
    [root@localhost ~]# echo $MONTH $YEAR
    May 2009
    7.40  清除已设置的变量DAY、MONTH、YEAR。
    [root@localhost ~]# unset DAY MONTH YEAR
    [root@localhost ~]# ECHO $DAY $MONTH $YEAR
    -bash: ECHO: command not found
    7.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
    7.42  计算变量X的值与数值“123”的和,并将计算结果重新赋值给变量X。
    [root@localhost ~]# echo $X
    34
    [root@localhost ~]# X=`expr $X + 123`
    [root@localhost ~]# echo $X
    157
    7.43  分页查看系统环境中设置的shell变量。
    [root@localhost ~]# set | less
    BASH=/bin/bash
    BASH_ARGC=()
    BASH_ARGV=()
    BASH_LINENO=()
    BASH_SOURCE=()
    ……//省略更多内容
    7.44  以分号分隔,显示当前用户的用户名、宿主目录、登录shell。
    [root@localhost ~]# echo "$USERHOMESHELL"
    root:/root:/bin/bash
    7.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/binPATH"
    [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
    7.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
    7.47   编辑“~/.bash_profile”文件,修改PATH的设置,以便用户在下次登录后能够使用“/opt/bin”目录作为默认搜索路径。
    [root@localhost ~]# vi ~/.bash_profile
    PATH=$PATHHOME/bin:/opt/bin
    Export PATH
    7.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
    7.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
    7.50  查看系统中的网络服务脚本network文件的开头五行内容。
    [root@localhost ~]# 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”目录所占用的空间大小,并列出其中内核文件的属性信息。
    [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-*
    7.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
    7.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
    7.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
    7.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

  • 相关阅读:
    swagger-ui 系统配置过程(基于spring+springmvc+swagger+springfox配置 web-api 管理系统)
    如何简单扫描整理
    C#双面打印解决方法(打印wordexcel图片)
    MODI出现ORC RUNNING ERROR的解决方法
    EMGU 2.9.X在VS2010下调试真正靠谱的配置
    如何解决The underlying provider failed on Open问题
    shell编程之——cat /dev/null作用
    docker 容器的设置2
    docker 容器的设置1
    ssl证书生成与转换(pfx, pem, key, crt)
  • 原文地址:https://www.cnblogs.com/sysk/p/4690565.html
Copyright © 2011-2022 走看看