1、编写服务脚本/root/bin/testsrv.sh,完成如下要求
(1) 脚本可接受参数:start, stop, restart, status
(2) 如果参数非此四者之一,提示使用格式后报错退出
(3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功” 考虑:如果事先已经启动过一次,该如何处理?
(4) 如是stop:则删除/var/lock/subsys/SCRIPT_NAME, 并显示“停止完成” 考虑:如果事先已然停止过了,该如何处理?
(5) 如是restart,则先stop, 再start 考虑:如果本来没有start,如何处理?
(6) 如是status, 则如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示 “SCRIPT_NAME is running...” 如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示“SCRIPT_NAME is stopped...” 其中:SCRIPT_NAME为当前脚本名
(7)在所有模式下禁止启动该服务,可用chkconfig 和 service命令管理#!/bin/bash
#
# chkconfig: - 88 12
# description: test service script
#
prog=$(basename $0)
lockfile=/var/lock/subsys/$prog
start() {
if [ -e $lockfile ]; then
echo "$prog is aleady running."
return 0
else
touch $lockfile
[ $? -eq 0 ] && echo "Starting $prog finished."
fi
}
stop() {
if [ -e $lockfile ]; then
rm -f $lockfile && echo "Stop $prog ok."
else
echo "$prog is stopped yet."
fi
}
status() {
if [ -e $lockfile ]; then
echo "$prog is running."
else
echo "$prog is stopped."
fi
}
usage() {
echo "Usage: $prog {start|stop|restart|status}"
}
if [ $# -lt 1 ]; then
usage
exit 1
fi
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
usage
esac
2、编写脚本/root/bin/copycmd.sh
(1) 提示用户输入一个可执行命令名称
(2) 获取此命令所依赖到的所有库文件列表
(3) 复制命令至某目标目录(例如/mnt/sysroot)下的对应路径下; 如:/bin/bash ==> /mnt/sysroot/bin/bash /usr/bin/passwd ==> /mnt/sysroot/usr/bin/passwd
(4) 复制此命令依赖到的所有库文件至目标目录下的对应路径下: 如:/lib64/ld-linux-x86-64.so.2 ==> /mnt/sysroot/lib64/ldlinux-x86-64.so.2
(5)每次复制完成一个命令后,不要退出,而是提示用户键入新的要复制的命 令,并重复完成上述功能;直到用户输入quit退出#!/bin/bash
ch_root="/mnt/sysroot"
[ ! -d $ch_root ] && mkdir $ch_root
bincopy() {
if which $1 &>/dev/null; then
local cmd_path=`which --skip-alias $1`
local bin_dir=`dirname $cmd_path`
[ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}
[ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}
return 0
else
echo "Command not found."
return 1
fi
}
libcopy() {
local lib_list=$(ldd `which --skip-alias $1` | grep -Eo '/[^[:space:]]+')
for loop in $lib_list;do
local lib_dir=`dirname $loop`
[ -d ${ch_root}${lib_dir} ] || mkdir -p ${ch_root}${lib_dir}
[ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}
done
}
read -p "Please input a command or quit: " command
while [ "$command" != "quit" ];do
if bincopy $command ;then
libcopy $command
fi
read -p "Please input a command or quit: " command
done
3、汉诺塔改进版step=0
move (){
let step++
echo "$step: move plate $1 $2 -----> $3"
}
hanoi(){
if [ $1 -eq 1 ];then
move $1 $2 $4
else
hanoi "$[$1-1]" $2 $4 $3
move $1 $2 $4
hanoi "$[$1-1]" $3 $2 $4
#这三行是经典所在,将问题简化成三次move,其中第一次和第三次都是用hanoi函数实现功能
,第二步是将最底下盘移到目标位置
fi
}
read -p "please input the number of plates: " number
hanoi $number A B C
4、示例:生成10个随机数保存于数组中,并找出其最大值和最小值#!/bin/bash
declare -a rand
declare -i max=0
declare –i min=32767
for i in {0..9}; do
rand[$i]=$RANDOM
echo ${rand[$i]}
[ ${rand[$i]} -gt $max ] && max=${rand[$i]}
[ ${rand[$i]} -lt $min ] && min=${rand[$i]}
done
echo "Max: $max Min:$min"
5、编写脚本,定义一个数组,数组中的元素是/var/log目录下所有以 .log结尾的文件;要统计其下标为偶数的文件中的行数之和#!/bin/bash
declare -a files
files=(/var/log/*.log)
declare -i lines=0
for i in $(seq 0 $[${#files[*]}-1]); do
if [ $[$i%2] -eq 0 ];then
let lines+=$(wc -l ${files[$i]} | cut -d' ' -f1)
fi
done
echo "Lines: $lines."
6、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序#!/bin/bash
#author:liushoashao
#version:1.0
#time:2016-08-2319:44:13
#description:maopao sorting
declare -a rand
declare -i sub=
echo "Please input the numbers you want to sort:"
read -a rand
for ((i=0;i
for ((j=0;j
if [ ${rand[$j]} -gt ${rand[$j+1]} ];then
sub=${rand[$j+1]}
rand[$j+1]=${rand[$j]}
rand[$j]=$sub
fi
done
#echo "${rand[${#rand[*]}-$i-2]}"
done
echo "The numbers have been sorted:${rand[*]}"
运行结果[root@shao testdir]# bash maopao.sh
Please input the numbers you want to sort:
77 6 55 99 2 13 3
The numbers have been sorted:2 3 6 13 55 77 99
7、让用户(管理员或所有用户)的PATH环境变量的值多出 一个路径,例如:/usr/local/apache2/binvim /etc/profile.d/apache2.sh
export PATH=/usr/local/apache2/bin:$PATH
8、用户wang登录时自动启用别名rm=‘rm –i’su - wang
vim ~/.bashrc
alias rm='rm -i'
9、用户登录时,显示红色字体的警示提醒信息 “hi,dangerous!”
交互式登录提示信息vim /etc/profile
echo -e "\e[31mhi,dangerous\e[0m"
非交互式登录提示信息vim /etc/bashrc
echo -e "\e[31mhi,dangerous\e[0m"
10、yum仓库配置方法
方法一:ftp或http上的现成yum源(以centos6.8为例)cd /etc/yum.repos.d/
#让CentOS-Base.repo失效
cp CentOS-Base.repo CentOS-Base.repo.bak
vim centos-local.repo
[base]
name=Base Repo on 10.1.0.1
baseurl=http://10.1.0.1/cobbler/ks_mirror/6/
gpgcheck=0
#epel源for EL6
vim centos-local.repo
[epel]
name=Fedora EPEL for EF6 x86_64
baseurl=http://10.1.0.1/fedora-epel/6/x86_64/
gpgcheck=0
#列出所有yum仓库,第一次会下载源数据文件
yum repolist
方法二:挂载发行版镜像光盘(以centos7为例)mount -r /dev/cdrom /media/cdrom
cd /etc/yum.repos.d/
vim local.repo
[base]
name=CentOS 7 Release 7.1503
baseurl=
enabled=1
gpgcheck=0
yum repolist
方法三:将本地多个rpm制成yum源#rpm包放在/yum/repo中
createrepo ./
cd /etc/yum.repos.d/
vim local.repo
[xen4centos]
name=Xen 4 CentOS 6
gpgcheck=0
yum repolist
11、编译安装详细步骤(以centos6安装apache为例)
环境:已经安装开发工具gcc(安装“Development Tools”即可)且已经下载程序源码
步骤一:./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/httpd2
步骤二:make
步骤三:make installcd /usr/local/apache2/bin
#查看80端口是否打开
netstate -tan
#启动apache服务
apachectl start
#关闭防火墙
iptables -F
安装后步骤:
(1):导出二进制程序目录至PATH环境变量中vim /etc/profile.d/apache2.sh
export PATH=/usr/local/apache2/bin:$PATH
(2)导出库文件路径vim /etc/ld.so.conf.d/apache2.conf
/usr/local/apache2/lib
#让系统重新生成缓存
ldconfig [-v]
(3)导出头文件(将文件导入/usr/include)
直接复制过去,或者基于链接的方式ln -sv /usr/local/apache2/include /usr/include/apache2.h
(4)导出帮助手册vim /etc/man.config
MANPATH /usr/local/apache2/man