Linux脚本搭建yum仓库,冒泡排序、yum仓库搭建及编译安装实例

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值