编写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 "$USERHOME
SHELL"
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
编写shell管理脚本(一)的更多相关文章
- 编写shell管理脚本(二)
8.1 先测试“/etc/vsftpd”.“/etc/hosts”是否为目录,并通过“$?”变量查看返回状态值,据此判断测试结果.[root@localhost ~]# [ -d /etc/vsft ...
- [转贴]systemd 编写服务管理脚本
[转贴]sparkdev大神的博客, 关于 systemd的配置文件的 介绍, 自己之前二进制安装 k8s 时 超过一个 service文件 但是当时不明不白的. 现在再学习一下大神的文章 的确牛B ...
- systemd 编写服务管理脚本
我们运行 linux 服务器的主要目的是通过运行程序提供服务,比如 mysql.web server等.因此管理 linux 服务器主要工作就是配置并管理上面运行的各种服务程序.在 linux 系统中 ...
- systemd 编写服务管理脚本---学习
转载:https://www.cnblogs.com/sparkdev/p/8521812.html 我们运行 linux 服务器的主要目的是通过运行程序提供服务,比如 mysql.web serve ...
- 编写shell脚本让springboot项目在CentOS中开机自启动
springboot项目部署在CentOS系统上时,如果遇到停电关机,公司的实施人员就得跑到甲方现场重新启动项目并测试,很是麻烦,这里探讨如何编写shell脚本控制springboot项目开机时自动启 ...
- linux软件管理之------编译安装nginx服务器并手动编写自动化运行脚本
红帽系列的 linux软件管理分为三类:1. rpm 安装软件.2. yum 安装软件.3. 源码包编译安装.前面两种会在相关专题给出详细讲解.源码包的编译安装是非常关键的,我们知道linux的相关版 ...
- linux 的基本操作(编写shell 脚本)
终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要.下面笔者就带你正式进入shell脚本的世界吧. 到现 ...
- 编写Shell脚本的最佳实践
编写Shell脚本的最佳实践 http://kb.cnblogs.com/page/574767/ 需要记住的 代码有注释 #!/bin/bash # Written by steven # Name ...
- 编写shell脚本遇到的问题
运行shell脚本提示“syntax error near unexpected token for((i=0;i<$length;i++))”: 原因是因为Linux下的换行符是 \n 而你在 ...
随机推荐
- Java基础(49):快速排序的Java封装(含原理,完整可运行,结合VisualGo网站更好理解)
快速排序 对冒泡排序的一种改进,若初始记录序列按关键字有序或基本有序,蜕化为冒泡排序.使用的是递归原理,在所有同数量级O(n longn) 的排序方法中,其平均性能最好.就平均时间而言,是目前被认为最 ...
- paper 3:matlab中save,load使用方法小结
功能描述]存储文件[软件界面]MATLAB->File->Save Workspace As将变量存入硬盘中指定路径.[函数用法] save:该函数将所有workspace中变量用二进制格 ...
- 学习K&R时初学者经常遇到的一个问题——EOF
学习K&R时初学者经常遇到的一个问题——EOF
- 使用Json.Net处理json序列化和反序列化接口或继承类
以前一直没有怎么关注过Newtonsoft的Json.Net这个第三方的.NET Json框架,主要是我以前在开发项目的时候大多数使用的都是.NET自带的Json序列化类JavaScriptSeria ...
- 在线白板,基于socket.io的多人在线协作工具
首发:个人博客,更新&纠错&回复 是昨天这篇博文留的尾巴,socket.io库的使用练习,成品地址在这里. 代码已经上传到github,传送门.可以开俩浏览器看效果. 现实意义是俩人在 ...
- Android之自定义生成彩色二维码
先导个zxing.jar包 下面是xml布局 activity_main.xml <RelativeLayout xmlns:android="http://schemas.andro ...
- 图像处理工具包ImagXpress教程:Accusoft不同组件间的图像数据传递
图像处理工具包ImagXpress的开发厂商Accusoft Pegasus旗下有多种图像处理相关的控件,但是这些图像处理控件之间的如何加传递图像数据呢?在ImagXpress 11版本之前,是需要将 ...
- 从追MM谈Java的23种设计模式(转)
从追MM谈Java的23种设计模式 这个是从某个文章转载过来的.但是忘了原文链接.如果知道的,我追加一下. 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西 ...
- javaWeb 使用jsp开发 foreach 标签
1.jsp代码 测试数据 <% List<String> list = new ArrayList<String>(); list.add("aaa" ...
- Linux安装JDK、MyEclipse、MySql
一.将下载好的 jdk-7u79-linux-x64.tar.gz 复制到要安装的目录 /usr/lib/jdk (注:jdk文件夹自己创建 sudo mkdir jdk)二.进入到目录 /usr/l ...