Shell 经典实例

Shell 经典实例
Shell 经典实例

Thizlinux 系统教程 Shell 经典实例

----------------Milo

经典小shell

1 列目录树的shell

脚本如下:

#!/bin/sh

# dtree: Usage: dtree [any directory]

dir=${1:-.}

(cd $dir; pwd)

find $dir -type d -print | sort -f | sed -e "s,^$1,," -e "/^$/d" -e "s,[^/]*/([^/]*)$,`----1," -e "s,[^/]*/,| ,g"

2 while中使用read (file是一个文件)

cat file | while read line

do

echo $line

echo " :: Please input any key(s):c"

str4read=""

while true

do

chr4read=`dd if=/dev/tty bs=1 count=1 2>/dev/null`

str4read=$str4read$chr4read

if [ "$chr4read" = "" ] ;then break; fi

done

echo " :: |$str4read|"

done

3 将多个空格替换为字符

sed 's/[ ][ ]*/ /g'

如果空格与tab共存时用

sed -e 's/[[:space:]][[:space:]]*/ /g' filename

4用脚本实现分割文件

#!/bin/bash

if [ $# -ne 2 ]; then

echo 'Usage: split file size(in bytes)'

exit

fi

file=$1

size=$2

if [ ! -f $file ]; then

echo "$file doesn't exist"

exit

fi

#TODO: test if $size is a valid integer

filesize=`/bin/ls -l $file | awk '{print $5}'` echo filesize: $filesize

let pieces=$filesize/$size

let remain=$filesize-$pieces*$size

if [ $remain -gt 0 ]; then

let pieces=$pieces+1

fi

echo pieces: $pieces

i=0

while [ $i -lt $pieces ];

do

echo split: $file.$i:

dd if=$file of=$file.$i bs=$size count=1 skip=$i let i=$i+1

done

echo "#!/bin/bash" > merge

echo "i=0" >> merge

echo "while [ $i -lt $pieces ];" >> merge

echo "do" >> merge

echo " echo merge: $file.$i" >> merge

echo " if [ ! -f $file.$i ]; then" >> merge

echo " echo merge: $file.$i missed" >> merge

echo " rm -f $file.merged" >> merge

echo " exit" >> merge

echo " fi" >> merge

echo " dd if=$file.$i of=$file.merged bs=$size count=1 seek=$i" >> merge echo " let i=$i+1" >> merge

echo "done" >> merge

chmod u+x merge'

5得到上月未日期,格式为YYYYMMDD

get_lastday_of_lastmonth()

{

yy=`date +%Y`

mm=`date +%m-1|bc`

[ $mm -lt 1 ] && mm=12;yy=`expr $yy - 1`

aaa=`cal $mm $yy`

dd=`echo $aaa|awk '{print $NF}'`

echo $yy$mm$dd

}

print $NF的$NF是打印最后一个列。因为awk的内置变量NF是列的总数,而$NF就代表着最后一列

6 实现用backup或tar命令来做目录备份

需要保持两个目录当中的文件以及属组关系不变。子目录结构不变,通过管道控制tar和backup命令,不需要中间的archive,(考虑到速度以及空间的关系)

(cd /source && tar cf - .) |(cd /dest && tar zxfp -)

偶没有 backup 命令,但是 tar 用管道可以,

tar -cf - dir1 | ( cd dir2; tar -xvf - )

搬移大法

more aaa.sh

#计算两个日期间有多少天

#date1,date2:yyyymmdd

#Usage:command date1 date2

str=$1

yy1=`echo $str|cut -c 1-4`

mm1=`echo $str|cut -c 5-6`

dd1=`echo $str|cut -c 7-8`

str=$2

yy2=`echo $str|cut -c 1-4`

mm2=`echo $str|cut -c 5-6`

dd2=`echo $str|cut -c 7-8`

count_day=`expr $dd2 - $dd1`

while [ $yy2 -ne $yy1 -o $mm2 -ne $mm1 ]

do

mm2=`expr $mm2 - 1`

[ $mm2 -eq 0 ] && mm2=12 && yy2=`expr $yy2 - 1`

aaa=`cal $mm2 $yy2`

bbb=`echo $aaa|awk '{print $NF}'`

count_day=`expr $count_day + $bbb`

done

echo $count_day

7 编写一个只允许用户执行telnet的shell

为了监视用户网络操作行为,指定unxi主机给设备管理员登陆,然后用shell控制他。只可以使用telnet命令,其他一概不许,包括cd,ls等。就是一个用来远程登陆的管理平台。我对shell不熟,请指导。

.profile中加入:

read addr

telnet $addr

exit

8 判断文件的访问权限是不是600

ls -l filename | awk '{ if($1 ~ "-rw-------") ..... }'

ls -l filename | grep "^-rw------" -c

#!/usr/bin/bash

#showmod

[ $# -eq 0 ] && { echo "Usage: $0 filelist ... "; exit ;} show()

{

{ [ -d $1 ] && ls -ld $1 ; [ -f $1 ] && ls -la $1 ;} | awk '{ umask=0

umask_=""

for(i=1;i

{

if(substr($1,i+1,1)=="r")

umask+=4;

if(substr($1,i+1,1)=="w")

umask+=2;

if(substr($1,i+1,1)=="x")

umask+=1;

if(i%3==0)

{

umask_=sprintf("%s%d",umask_,umask);

umask=0;

}

}

printf("%-20.20s: %-10.10s --> %s ",$9,$1,umask_);

}';

}

for file_dir in $*

do

show $file_dir

done

9 算青蛙的脚本

maxcount=$1;

count=1;

if [ $# -eq 1 ]

then

while [ $count -le $maxcount ]

do echo $count 只青蛙 $count 张嘴, `expr $count * 2`只眼睛,`expr $count * 4`条腿; count=`expr $count + 1`;

done;

else

echo "usage: sendos count"

fi

10 在SHELL程序中实现‘按任意键继续’

在写一个SHELL程序,可是遇到了一个难题,在READ接受输入时,必须按回车键才能确认,而我需要只要按一个键就能得到用户的输入,无须按回车键!有什么好办法呢

#!/bin/sh

get_char()

{

SAVEDSTTY=`stty -g`

stty -echo

stty raw

dd if=/dev/tty bs=1 count=1 2> /dev/null

stty -raw

stty echo

stty $SAVEDSTTY

}

echo "Press any key to continue..."

char=`get_char`

如果你的机器上不认stty raw那么把函数中两处出现的raw换成cbreak。

11 在linux环境下启动时打开numlock

想在系统启动时自动打开NumLock,可以在/etc/rc.d/rc.local中加入以下内容:

for t in 1 2 3 4 5 6 7 8

do

setleds +num

$t>/dev/null

done

12 在shell里如何限制输入的长度

举个例子,比如用户输入用户名时只能给他输入8个字符,如果超过了8个字符光标就停止在第八个字符那儿,不继续,一直等待回车只怕要自己来另写一个SHELL了。

我现在可以实现到如果输入超出的话光标就停在最后一个字符,但是对于那些输入小于规定位数的那些就没折了,举个例子,比如用户域最长不能超过8位,我输入了6位然后回车,就不会结束,一定要输入完8位按回车才可以结束

文件名: input.sh 用法:input.sh 限制的长度

例:input.sh 8 即限制输入8位。

#!/bin/ksh

# Program Name : input.sh

trap '' 1 2 3 5 7 9 15 13

getcon(){

stty raw -echo

conchar=`dd if=/dev/tty bs=1 count=1 2>/dev/null`

stty sane

echo "$conchar"

}

while

i=0;clear >/dev/tty

echo "

13 双机(多机)自动互备份方案

问题:

公司有两台LINUX服务器,每个服务器只有一个硬盘。所以备份的问题就显得特别重要。我们装有MySQL数据库。当然同时也要解决MySQL备份的问题。

目的:

host 机器最终所有备份都在其上留备份,ship机器保存host机器备份

方法:

通过shell脚本,打包相关要备份的文件。然后通过ftp操作下载,上载完成解决方案。

两台机器root 通过crontab 让脚本在各自机器定时执行。

建议host 每天早上3点执行。

建议ship 每天早上6点执行。

注意点:

两台服务器系统时间最好相差不要超过1小时。

此脚本是每周礼拜6执行备份的。当然你也可以修改成每月或每天备份。

当然也可以修改成一个增量备份脚本。

具体脚本:

以下为host机器脚本

#//////////////host机器脚本///////////////

#! /bin/sh

HOST="https://www.360docs.net/doc/087136364.html,"

USER="backup_use" #ship机器backup_use用户

PASSWORD="backup_use" #ship机器对应用户密码

BACKUPDIR="/home/backup_use/ship" #host机器backup_use用户目录

BACKUPDIR2="/home/backup_use/host" #host机器backup_use用户目录

MYSQLPASS="abc" #ship 机器MySQL root 用户密码

PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/nusphere/MySQL/bin

DOW=`date +%a`

DM=`date +%Y%b%d`

FILE1=ship-virtual-$DM.tar.gz

FILE2=ship-MySQLdata-$DM.tar.gz

FILE3=ship-szeasy-$DM.tar.gz

FILE4=ship-other-$DM.tar.gz

#

FIL1=$BACKUPDIR2/host-main-$DM.tar.gz

FIL2=$BACKUPDIR2/host-MySQLdata-$DM.tar.gz

FIL3=$BACKUPDIR2/host-other-$DM.tar.gz

#

DIRECTORIE1="/www /home/jjd" # 要备份的目录1

DIRECTORIE2="/etc /var/named /usr/local/nusphere/apache/conf" # 要备份的目录2 #

if [ $DOW = "Sat" ]; then # 每个礼拜六完全备份

tar -zcpf $FIL1 $DIRECTORIE1

tar -zcpf $FIL3 $DIRECTORIE2

MySQLdump --all-databases -q -uroot -p$MYSQLPASS |gzip > $FIL2 ftp -i -n < $BACKUPDIR/$COMPUTER-MySQLdata-$DM.tar.gz

fi

14 文件序列a1,a2,a3...a11,a12...a1000改成a0001,a0002 (1000)

$cat test

ls a* > tempfile1

sed 's/a//' tempfile1 > tempfile2

awk '{printf("mv a%s a%04s ", $0, $0)}' tempfile2 > tempfile3 chmod 700 tempfile3

./tempfile3

rm tempfile*

$chmod test

---------------------------------------------------------------- ls a*|awk '{

num=substr($1,2,length($1)-1);

printf "mv %s a%04d ",$1,num

}'>rename.sh

sh rename.sh

----------------------------------------------------------------

for file in a*

do

newfile=`echo $file | awk '{printf "a%04d", substr($1, 2, length($1)-1)}'` mv $file $newfile

done

给个不用awk的,效率会低一点

ls -1 a*|while read j

do

num=`echo $j|cut -b 2-`

num=`printf a%04s $num`

mv $j $num

done

-----------------------------------------------------------------

稍微缩减一下:

for file in a*

do

mv $file `echo $file|awk '{printf "a%04d", substr($1,2,length($1)-1)}'` done

如果a1,a2,a3...等文件是各自有不同的扩展名呢?就像a1.pxx,a2,baa,a3.tga... 这样是不是可以呢:

for file in a*

do

nam=`echo $file|cut -d. -f1`

exe=`echo $file|cut -d. -f2`

mv $file `echo $nam|awk '{printf "a%04d", substr($1,2,length($1)-1)}'`.$exe done

15 禁止从一个IP登录的shell

解决方案0:

用shell完全可以解决,如果有tcpwrapper的系统,可以直接加/etc/hosts.deny

解决方案1:

在/etc/profile里加一段shell就可以了(sco openserver)

这是我写的只要求本C段登陆的shell,改改就可以了.

who=`who am i|awk '{print $1}'`

myterm=`who am i|awk '{print substr($2,4,2)}'`

if [ "x"$who = "xroot" ]

then

subnet=`finger|grep $myterm|awk '{print substr($8,1,8)}'`

else

subnet=`finger|grep $myterm|awk '{print substr($7,1,8)}'`

fi

test x$subnet != x && test x$who != xroot && test "x"$subnet != "x46.8.44." && echo " Please login from local network " && exit

16 eval用法三例

## shell:/bin/sh ##

#例一:

#寻找符合条件的变量名,然后将该变量的值赋予另一变量

v1=aaa

v2=bbb

c=1

if [ $c -eq 1 ]

then

vname=v$c #找到符合条件的变量名为v1

eval vvv="$"$vname ; echo vvv: $vvv #将变量v1的值赋予vvv,即,使vvv=aaa

eval vvv='$'$vname ; echo vvv: $vvv #将变量v1的值赋予vvv,即,使vvv=aaa

#eval vvv=$$vname ; echo vvv: $vvv #错误用法

fi

#例二:#以变量v1的值aaa作为变量名,将变量vaaa的值赋予这一新定义的变量aaa v1=aaa ; vaaa="This is aaa"

#eval $v1=$vaaa ; echo aaa: $aaa #错误用法

#eval $v1="$vaaa" ; echo aaa: $aaa #错误用法

eval $v1='$vaaa' ; echo aaa: $aaa

#例三:

#以变量v1的值aaa作为变量名,并将变量名字串作为值赋予自身

v1=aaa ; vaaa="This is aaa"

eval $v1=$v1 ; echo aaa: $aaa #与例二的错误用法不同,这一用法是正确的

eval $v1="$v1" ; echo aaa: $aaa #与例二的错误用法不同,这一用法是正确的

#区别在于,例二中的vaaa的值中间有空格

eval $v1='$v1' ; echo aaa: $aaa

17 改变UNIX终端颜色

a. 用echo "[31m测试[37m"

echo "^[[Xm YourChar"

(X=30,31...36?)

请注意这个转义系列的敲法是,[30m

echo "[<代码>;<代码>;<代码>m"

注意,语句必须要在""之间,属性分隔符为";",如闪烁红色

echo "[31;5m测试"

b. 前景背景颜色

---------------------------------------

30 40 黑色

31 41 紅色

32 42 綠色

33 43 黃色

34 44 藍色

35 45 紫紅色

36 46 青藍色

37 47 白色

代码意义

-------------------------

0 OFF

1 高亮显示

4 underline

5 闪烁

7 反白显示

8 不可见

c. 产生颜色(黑色背景加绿色前景色):

sco: setcolor red; echo "abcd"; setcolor white

linux/BSD: /usr/bin/echo -e "

18 恢复缺省bash提示符

export PS1="[u@h W]$ "

保险起见,在~/.bashrc和~/.bash_profile

19 grep/awk/sed的多条件查询

# cat gt

one two three

four five six

one two

one seven three

# grep one three gt

grep: three: No such file or directory gt:one two three

gt:one two

gt:one seven three

截取同时出现one和three的行,结果应该是:one two three

one seven three

a. 用grep

cat gt | grep one | grep three b. 用awk

awk '/one/&&/three/' gt

c. 用sed

sed -ne '/one/{/three/p}' gt 完毕

Shell 经典实例

Thizlinux 系统教程 Shell 经典实例 ----------------Milo 经典小shell 1 列目录树的shell 脚本如下: #!/bin/sh # dtree: Usage: dtree [any directory] dir=${1:-.} (cd $dir; pwd) find $dir -type d -print | sort -f | sed -e "s,^$1,," -e "/^$/d" -e "s,[^/]*/([^/]*)$,`----1," -e "s,[^/]*/,| ,g" 2 while中使用read (file是一个文件) cat file | while read line do echo $line echo " :: Please input any key(s):c" str4read="" while true do chr4read=`dd if=/dev/tty bs=1 count=1 2>/dev/null` str4read=$str4read$chr4read if [ "$chr4read" = "" ] ;then break; fi

done echo " :: |$str4read|" done 3 将多个空格替换为字符 sed 's/[ ][ ]*/ /g' 如果空格与tab共存时用 sed -e 's/[[:space:]][[:space:]]*/ /g' filename 4用脚本实现分割文件 #!/bin/bash if [ $# -ne 2 ]; then echo 'Usage: split file size(in bytes)' exit fi file=$1 size=$2 if [ ! -f $file ]; then echo "$file doesn't exist" exit fi

AIX常用命令大全

AIX常用命令大全 查看交换区信息: lsps -a 显示交换区的分布信息 lsps -s 显示交换区的使用信息 slibclean 清除处理程序遗留的旧分页信息 smit mkps 建立交换区空间信息 swapon -a 启动所有的分页空间 /etc/swapspaces 存放分页空间表格信息 ------------------------------------------------- 显示卷信息: lsvg 显示卷的名称 lsvg -l rootvg 显示rootvg卷的详细信息 ------------------------------------------------- mount卷的方法: varyonvg datavg 加载datavg卷 mount /dev/data1 加载datavg下的一个data1卷 裸设备类型:raw,jfs jfs可以转变成文件系统,而raw则不行 ------------------------------------------------- 在裸设备上安装oracle系统: 修改裸设备的权限,如裸设备名为system01,安装数据库用户为oracle chown oracle:dba /dev/system01 chown oracle:dba /dev/rsystem01 在使用文件时必须用rsystem01 ------------------------------------------------- smit快速路径名称:(smit:图形方式,smitty:字符方式) dev 设备管理 diag 诊断 jfs 定期档案管理系统 lvm 逻辑卷册系统管理员管理 nfs NFS管理 sinstallp 软件安装及维护 spooler 列印队列管理 system 系统管理

Shell命令

Shell Shell 就是用户与操作系统内核之间的接口,起着协调用户与系统的一致性和在用户与系统之间进行交互的作用。 4.1.1 Shell 的基本概念 1. 什么是S hell Shell 就是用户与操作系统内核之间的接口,起着协调用户与系统的一致性和在用户与系统之间进行交互的作用。Shell 在L inux 系统中具有极其重要的地位,如图4-1 所示

第 4 章 Shell 与 V i 编辑器 - 71 - diff grep vi multitasking sh gcc device hardware interface kernn e l TCP/IP stack bash utilii t es 图 4-1 Linux 系统结构组成 2. Shell 的功能 Shell 最重要的功能是命令解释,从这种意义上来说,Shell 是一个命令解释器。Linux 系统中的所有可执行文件都可以作为 Shell 命令来执行。将可执行文件作一个分类,如表 4-1 所示。 表 4-1 可执行文件的分类 部的解释器将其解释为系统功能调用并转交给内核执行;若是外部命令或实用程序就试图 在硬盘中查找该命令并将其调入内存,再将其解释为系统功能调用并转交给内核执行。在 查找该命令时分为两种情况: 用户给出了命令路径,Shell 就沿着用户给出的路径查找,若找到则调入内存,若没有 则输出提示信息; 用户没有给出命令的路径,Shell 就在环境变量 PATH 所制定的路径中依次进行查找, 若找到则调入内存,若没找到则输出提示信息。 图 4-2 描述了 S hell 是如何完成命令解释的。

层次分析法模型

二、模型的假设 1、假设我们所统计和分析的数据,都是客观真实的; 2、在考虑影响毕业生就业的因素时,假设我们所选取的样本为简单随机抽样,具有典型性和普遍性,基本上能够集中反映毕业生就业实际情况; 3、在数据计算过程中,假设误差在合理范围之内,对数据结果的影响可以忽略. 三、符号说明

四、模型的分析与建立 1、问题背景的理解 随着我国改革开放的不断深入,经济转轨加速,社会转型加剧,受高校毕业生总量的增加,劳动用工管理与社会保障制度,劳动力市场的不尽完善,以及高校的毕业生部分择业期望过高等因素的影响,如今的毕业生就业形势较为严峻.为了更好地解决广大学生就业中的问题,就需要客观地、全面地分析和评价毕业生就业的若干主要因素,并将它们从主到次依秩排序. 针对不同专业的毕业生评价其就业情况,并给出某一专业的毕业生具体的就业策略. 2、方法模型的建立 (1)层次分析法 层次分析法介绍:层次分析法是一种定性与定量相结合的、系统化、层次化的分析方法,它用来帮助我们处理决策问题.特别是考虑的因素较多的决策问题,而且各个因素的重要性、影响力、或者优先程度难以量化的时候,层次分析法为我们提供了一种科学的决策方法. 通过相互比较确定各准则对于目标的权重,及各方案对于每一准则的权重.这些权重在人的思维过程中通常是定性的,而在层次分析法中则要给出得到权重的定量方法. 我们现在主要对各个因素分配合理的权重,而权重的计算一般用美国运筹学

家T.L.Saaty 教授提出的AHP 法. (2)具体计算权重的AHP 法 AHP 法是将各要素配对比较,根据各要素的相对重要程度进行判断,再根据计算成对比较矩阵的特征值获得权重向量k W . Step1. 构造成对比较矩阵 假设比较某一层k 个因素12,,,k C C C 对上一层因素ο的影响,每次两个因素i C 和j C ,用ij C 表示i C 和j C 对ο的影响之比,全部比较结果构成成对比较矩阵C ,也叫正互反矩阵. *()k k ij C C =, 0ij C >,1 ij ji C C =, 1ii C =. 若正互反矩阵C 元素成立等式:* ij jk ik C C C = ,则称C 一致性矩阵. 标度ij C 含义 1 i C 与j C 的影响相同 3 i C 比j C 的影响稍强 5 i C 比j C 的影响强 7 i C 比j C 的影响明显地强 9 i C 比j C 的影响绝对地强 2,4,6,8 i C 与j C 的影响之比在上述两个相邻等级之间 11 ,,29 i C 与j C 影响之比为上面ij a 的互反数 Step2. 计算该矩阵的权重 通过解正互反矩阵的特征值,可求得相应的特征向量,经归一化后即为权重向量 12 = [ , ,..., ]T k k k kk Q q q q ,其中的ik q 就是i C 对ο的相对权重.由特征方程 A-I=0λ,利用Mathematica 软件包可以求出最大的特征值 max λ 和相应的特征向 量. Step3. 一致性检验 1)为了度量判断的可靠程度,可计算此时的一致性度量指标CI :

linux脚本实例

1.写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值。直到用户输入"end"停止。 #!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done 2.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。 #!/bin/sh case ${1##*.tar.} in bz2) tar jxvf $1 ;; gz) tar zxvf $1 ;; *) echo "wrong file type" esac 3.写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,比如文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,包的信息等。然后询问是否继续查询,是则循环刚才的过程,否则退出。 #!/bin/sh RPM=/bin/rpm option="-q" while true do echo "what to query?" select var in "All" "file" "package name" do case $var in All) option=$option"a" break ;; file) echo -n "please input file name: "

ubuntu shell 使用命令大全

ubuntu shell 使用命令大全 前言 下面的命令大都需要在控制台/ 终端/ shell 下输入。 控制台, 终端, 和shell 意味着同样一件事- 一个命令行界面,他可以用来控制系统。 打开一个控制台: 应用程序--> 附件--> 终端 任何一个使用'sudo' 作为前缀的命令都需要拥有管理员(或root) 访问权限。所以你会被提示输入你自己的密码。 安装升级 查看软件xxx安装内容 dpkg -L xxx 查找软件库中的软件 apt-cache search 正则表达式 或 aptitude search 软件包 显示系统安装包的统计信息 apt-cache stats 显示系统全部可用包的名称 apt-cache pkgnames 显示包的信息 apt-cache show k3b 查找文件属于哪个包 apt-file search filename 查看已经安装了哪些包 dpkg -l 查询软件xxx依赖哪些包 apt-cache depends xxx 查询软件xxx被哪些包依赖 apt-cache rdepends xxx 增加一个光盘源 sudo apt-cdrom add 系统升级 sudo apt-get update (这一步更新包列表) sudo apt-get dist-upgrade (这一步安装所有可用更新) 或者 sudo apt-get upgrade (这一步安装应用程序更新,不安装新内核等) 清除所有已删除包的残馀配置文件 dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P 如果报如下错误,证明你的系统中没有残留配置文件了,无须担心。 dpkg: --purge needs at least one package name argument Type dpkg --help for help about installing and deinstalling packages [*]; Use `dselect' or `aptitude' for user-friendly package management; Type dpkg -Dhelp for a list of dpkg debug flag values; Type dpkg --force-help for a list of forcing options; Type dpkg-deb --help for help about manipulating *.deb files; Type dpkg --license for copyright license and lack of warranty (GNU GPL) [*]. Options marked [*] produce a lot of output - pipe it through `less' or `more' ! 编译时缺少h文件的自动处理 sudo auto-apt run ./configure 查看安装软件时下载包的临时存放目录

经典shell 脚本实例

Linux shell 脚本实例 1. 写一个脚本,利用循环计算10的阶乘#!/bin/sh factorial=1 for a in `seq 1 10` do factorial=`expr $factorial \* $a` done echo "10! = $factorial" 2. 写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值。直到用户输入"end"停止。#!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done ////////////////////////////////////////// #!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done 3. 写一个脚本,利用循环和continue关键字,计算100以内能被3整除的数之和 4.一个函数,利用shift计算所有参数乘积,假设参数均为整数 #! /bin/sh result=1 while [ $# -gt 0 ] do result=`expr $result * $1` shift done echo $result 5.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。#!/bin/shcase ${1##*.tar.} in bz2) tar jxvf $1 ;; gz) tar zxvf $1 ;; *) echo "wrong file type"esac6.写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,比如文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,包的信息等。然后询问是否继续查询,是则循环刚才的过程,否则退出。

AIX常用命令

AIX常用命令目录指令 文件操作 选择操作

安全操作 编程操作 进程操作 时间操作 网络与通信操作 Korn Shell命令

其他命令 1 基本命令 pwd 查看当前目录 ls -a查看隐藏信息-l查看详细信息 cd 转到指定目录 mkdir 创建目录 mkdir –p 创建多级目录 rmdir 删除目录(不能删除当前目录或父目录且必须为空) rm -rf file 删除文件 clear 清屏 istat 查看文件i_node表的信息

touch 更新文件的访问和修改时间 date 列出当前日期时间 who 查看已登陆的用户 who am i 查看当前用户 su 切换用户 man 帮助 vi file 创建/编辑文件 exit 退出 cp source target 拷贝文件 mv source target 移动文件或重命名 cat 查看文件内容 compress -v file 压缩文件 uncompress file.z 解压文件 passwd 修改口令 shutdown -h now 立刻关机 shutdown -r now 关闭并立刻重启 reboot 重启 2 查看端口连接数命令 netstat -an | find /i "8000" /c Windows下查看8000端口的连接

netstat -an | grep 8000 Linux和Aix下查看8000端口的连接 netstat -an | grep 8000 |wc -l 自动统计linux和Aix端口号为8000的连接数 3 更改权限命令 chmod a-x myfile rw- rw- rw-收回所有用户的执行权限chmod og-w myfile rw-r--r--收回同组用户和其他用户的写权限 chmod g+w myfile rw- rw- r--赋予同组用户写权限chmod u+x myfile rwx rw-r--赋予文件属主执行权限(常用) chmod go+x myfile rwx rwx r-x 赋予同组用户和其他用户执行权限 4 拷贝文件命令 //远程目录拷贝到本地 scp cata@108.199.2.201:/home/cata/nmon/nmon /home/oracle/nmon //本地拷贝到远程目录

数学建模之层次分析法

第四讲层次分析法 在现实世界中,往往会遇到决策的问题,比如如何选择旅游景点的问题,选择升学志愿的问题等等。在决策者作出最后的决定以前,他必须考虑很多方面的因素或者判断准则,最终通过这些准则作出选择。 比如选择一个旅游景点时,你可以从宁波、普陀山、浙西大峡谷、雁荡山和楠溪江中选择一个作为自己的旅游目的地,在进行选择时,你所考虑的因素有旅游的费用、旅游地的景色、景点的居住条件和饮食状况以及交通状况等等。这些因素是相互制约、相互影响的。我们将这样的复杂系统称为一个决策系统。这些决策系统中很多因素之间的比较往往无法用定量的方式描述,此时需要将半定性、半定量的问题转化为定量计算问题。层次分析法是解决这类问题的行之有效的方法。层次分析法将复杂的决策系统层次化,通过逐层比较各种关联因素的重要性来为分析、决策提供定量的依据。 一、建立系统的递阶层次结构 首先要把问题条理化、层次化,构造出一个有层次的结构模型。一个决策系统大体可以分成三个层次: (1) 最高层(目标层):这一层次中只有一个元素,一般它是分析问题的预定目标或理想结果; (2) 中间层(准则层):这一层次中包含了为实现目标所涉及的中间环节,它可以由若干个层次组成,包括所需考虑的准则、子准则; (3) 最低层(方案层):这一层次包括了为实现目标可供选择的各种措施、决策方案等。 比如旅游景点问题,我们可以得到下面的决策系统: 目标层——选择一个旅游景点 准则层——旅游费用、景色、居住、饮食、交通 方案层——宁波、普陀山、浙西大峡谷、雁荡山、楠溪江 二、构造成对比较判断矩阵和正互反矩阵 在确定了比较准则以及备选的方案后,需要比较若干个因素对同一目标的影响,从额确定它们在目标中占的比重。如旅游问题中,五个准则对于不同决策者在进行决策是肯定会有不同的重要程度,而不同的方案在相同的准则上也有不同的适合程度表现。层次结构反映了因素之间的关系,但准则层中的各准则在目标衡量中所占的比重并不一定相同,在决策者的

Shell脚本编程详解-吐血共享

第12章 Shell 脚本编程 ● Shell 命令行的运行 ● 编写、修改权限和执行Shell 程序的步骤 ● 在Shell 程序中使用参数和变量 ● 表达式比较、循环结构语句和条件结构语句 ● 在Shell 程序中使用函数和调用其他Shell 程序 12-1 Shell 命令行书写规则 ◆ Shell 命令行的书写规则 对Shell 命令行基本功能的理解有助于编写更好的Shell 程序,在执行Shell 命令时多个命令可以在一个命令行上运行,但此时要使用分号(;)分隔命令,例如: [root@localhost root]# ls a* -l;free;df 长Shell 命令行可以使用反斜线字符(\)在命令行上扩充,例如: [root@localhost root]# echo “ this is \ >long command ” This is long command 注意: “>”符号是自动产生的,而不是输入的。 12-2 编写/修改权限及执行Shell 程序的步骤 ◆ 编写Shell 程序 ◆ 执行Shell 程序 Shell 程序有很多类似C 语言和其他程序设计语言的特征,但是又没有程序语言那样复杂。Shell 程序是指放在一个文件中的一系列Linux 命令和实用程序。在执行的时候,通过Linux 操作系统一个接一个地解释和执行每条命令。首先,来编写第一个Shell 程序,从中学习Shell 程序的编写、修改权限、执行过程。

12-2-1 编辑Shell程序 编辑一个内容如下的源程序,保存文件名为date,可将其存放在目录/bin下。 [root@localhost bin]#vi date #! /bin/sh echo “Mr.$USER,Today is:” echo &date “+%B%d%A” echo “Wish you a lucky day !” 注意: #! /bin/sh通知采用Bash解释。如果在echo语句中执行Shell命令date,则需要在date 命令前加符号“&”,其中%B%d%A为输入格式控制符。 12-2-2 建立可执行程序 编辑完该文件之后不能立即执行该文件,需给文件设置可执行程序权限。使用如下命令。[root@localhost bin]#chmod +x date 12-2-3 执行Shell程序 执行Shell程序有下面三种方法: 方法一: [root@localhost bin]#./ date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法二: 另一种执行date的方法就是把它作为一个参数传递给Shell命令: [root@localhost bin]# Bash date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法三: 为了在任何目录都可以编译和执行Shell所编写的程序,即把/bin的这个目录添加到整个环境变量中。 具体操作如下: [root@localhost root]#export PATH=/bin:$PATH [root@localhost bin]# date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day !

层次分析法模型

二、模型的假设 1、假设我们所统计与分析的数据,都就是客观真实的; 2、在考虑影响毕业生就业的因素时,假设我们所选取的样本为简单随机抽样,具有典型性与普遍性,基本上能够集中反映毕业生就业实际情况; 3、在数据计算过程中,假设误差在合理范围之内,对数据结果的影响可以忽略、 三、符号说明

四、模型的分析与建立 1、问题背景的理解 随着我国改革开放的不断深入,经济转轨加速,社会转型加剧,受高校毕业生总量的增加,劳动用工管理与社会保障制度,劳动力市场的不尽完善,以及高校的毕业生部分择业期望过高等因素的影响,如今的毕业生就业形势较为严峻、为了更好地解决广大学生就业中的问题,就需要客观地、全面地分析与评价毕业生就业的若干主要因素,并将它们从主到次依秩排序、 针对不同专业的毕业生评价其就业情况,并给出某一专业的毕业生具体的就业策略、 2、方法模型的建立 (1)层次分析法 层次分析法介绍:层次分析法就是一种定性与定量相结合的、系统化、层次化的分析方法,它用来帮助我们处理决策问题、特别就是考虑的因素较多的决策问题,而且各个因素的重要性、影响力、或者优先程度难以量化的时候,层次分析法为我们提供了一种科学的决策方法、 通过相互比较确定各准则对于目标的权重,及各方案对于每一准则的权重、这些权重在人的思维过程中通常就是定性的,而在层次分析法中则要给出得到权重的定量方法、 我们现在主要对各个因素分配合理的权重,而权重的计算一般用美国运筹学家T、L、Saaty教授提出的AHP法、 (2)具体计算权重的AHP 法 AHP法就是将各要素配对比较,根据各要素的相对重要程度进行判断,再根据 W、 计算成对比较矩阵的特征值获得权重向量 k

AIX命令手册

系统的配置 PV(physical volume)物理卷:普通的直接访问的存储设备,有固定的和可移动的之分,代表性的就是硬盘。 VG(volume group)卷组:AIX中最大的存储单位,一个卷组由一组物理硬盘组成,也就是由一个或多个物理卷组成。 PP(physical partition)物理分区:是把物理卷划分成连续的大小相等的存储单位,一个卷组中的物理分区大小都相等。 LP(logical partition)逻辑分区:适映射物理分区的逻辑单位,一个逻辑分区可以对应一个也可以对应多个物理分区。 LV(logical volume)逻辑卷:是指卷组中由多个逻辑分区组成的集合,逻辑卷中的逻辑分区是连续的,但是对应的物理分区是不连续的,可以在一个磁盘上,也可以在不同的磁盘上。 FS(file system)文件系统:是指在AIX系统中面向用户的存储空间。一个逻辑卷只能创建一个文件系统,也就是说一个文件系统对应一个逻辑卷,如果删除逻辑卷也将删除文件系统。

配置hd6 #smitty chps#lsvg rootvg(PP)#lsps –a(size)(特定的值—size)/pp=128—当前所用的值 修改时区时间#smitty chtz_date 关机重启#shutdown -Fr重启#shutdown -F关机 修改网关#smitty route 编辑limits #vi /etc/security/limits 编辑hosts #vi /etc/hosts 切换用户#su tianhao 修改TCP/IP #smitty tcpip 安装软件#smitty installp 安装数据库软件包PerfTools 补丁bos.adt, bos.data,https://www.360docs.net/doc/087136364.html,,https://www.360docs.net/doc/087136364.html,pat,bos.cifs_fs, rsct.basic,bos.dosu (https://www.360docs.net/doc/087136364.html,pat.basic,https://www.360docs.net/doc/087136364.html,pat.clients,rsct.opt.storagem,bos.clvm)为HA补丁查看系统版本#Oslevel –r #oslevel –s 图形界面#smit easy_install 安装文件X11 DT 安装包CDE 启动图形界面#cd /etc #./rc.dt 安装HACMP(doc ha ha nfs不安装)#lslpp -l |grep cluster版本修改系统最大进程数#smitty chgsys 语言环境#smit mlang 安装文件zh_cn gb18030中文 添加文件系统#smitty jfs2 修改文件系统#chfs –a size=10G /usr df –g chfs –a size=2G / (/home /usr /var /tmp /dev /etc /其他)文件系统lsvg rootvg 活动空间free 配置AIO #smit chgaio available 数据库

linux操作系统之Shell编程

shell1.sh 显示日期和时间。 #!/bin/bash echo “current time is `date`” //date要加反引号 shell2.sh 显示文件名,并显示位置参数(执行时带一个参数)。(①$0是一个特殊的变量,它的内容是当前这个shell程序的文件名;②$1是一个位置参数,位置参数之间用空格分隔,shell取第一个位置参数替换程序文件中的$1,第二个替换$2,依次类推。) #!/bin/bash echo “the program name is $0” //$0是一个特殊的变数 echo “the first para is $1” //$1是一个位置参数 echo “the program exit” //执行时带一个参数如./shell2.sh abcd shell3.sh 判断并显示位置参数 #!/bin/bash if [ -d “$1”];then echo “$1 is directory ,existed” else echo “$1 does not exist ,now create it” mkdir $1 echo “$1 is created” fi //执行时带一个参数 shell4.sh 问候用户 #!/bin/bash user=`whoami` case $user in teacher) echo “hello teacher”;; root) echo “hello root”;; *) echo “hello $user,welcome” esac 1、求1+2+3+...+100的和是? #!/bin/bash

AIX系统常用命令

AIX常用命令 一.目录和文件操作 1.ls命令列出指定目录下的文件,缺省目录为当前目录 #ls -a 列出所有文件,包括隐藏文件 #ls –l 显示文件详细信息 2.pwd显示出当前的工作目录 3.cd改变当前的工作目录 #cd /tmp 进入/tmp 目录 #cd .. 进入上级目录 4.mkdir 建立目录 #mkdir tmp 在当前目录下建立子目录tmp #mkdir -p /tmp/a/b/c 建立目录/tmp/a/b/c ,若不存在目录/tmp/a 及/tmp/a/b 则建立 5.rm 删除文件或目录 - f 删除文件时不作提示 - r 删除目录及其所有子目录 [例子]: #rm file1 删除文件file1 #rm -r /mytmp 删除目录/mytmp 6.cp 拷贝文件 [语法]: cp [ -p ] [ -r ] 文件1 [ 文件2 ...] 目标 文件1(文件2 ...)拷贝到目标上,目标不能与文件同名。 [参数]:

- p 不仅拷贝文件内容,还有修改时间,存取模式,存取控制表 - r 若文件名为目录,则拷贝目录下所有文件及子目录和它们的文件 [例子]: #cp file1 file2 将文件file1 拷贝到文件file2 #cp file1 file2 /tmp 将文件file1 和文件file2 拷贝到目录/tmp 下 #cp -r /tmp /mytmp 将目录/tmp 下所有文件及其子目录拷贝至目录/mytmp 7.mv 移动文件 将文件移动至目标,若目标是文件名,则相当于文件改名 #mv file1 file2 将文件file1 改名为file2 #mv file1 file2 /tmp 将文件file1 和文件file2 移动到目录/tmp 下 8.chmod 文件权限设置 [语法]: chmod [-R] 模式文件. #chmod 777 file1将文件file1存取权限置为所有用户可读可写可执行 #chmod 755 file1 文件的属主对文件file1有可读可写可执行的权限,文件所归属的用户组有可读可执行的权限,其它用户有可读可执行的权限。 9.Chown 文件属性设置 [语法]: chown [-R] 文件属主文件... [参数]: -R 改变所有子目录下所有文件的存取模式 [例子]: chown tom file1 将文件file1 的文件属主改为用户tom chown –R oracle /oracle 将/oracle属主改为用户oracle 10.vi 文本编辑 vi是unix上最常用的文本编辑工具 vi filename :打开或新建文件,并将光标置于第一行首 插入命令:i 从光标所在位置前面开始插入资料

Linux Shell常用命令总结

1. find find pathname -options [-print -exec -ok] 让我们来看看该命令的参数: pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 -print find命令将匹配的文件输出到标准输出。 -exec find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {} \;,注意{}和\;之间的空格,同时两个{}之间没有空格, 注意一定有分号结尾。 0) -ok 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行 find . -name "datafile" -ctime -1 -exec ls -l {} \; 找到文件名为datafile*, 同时创建实际为1天之内的文件, 然后显示他们的明细. find . -name "datafile" -ctime -1 -exec rm -f {} \; 找到文件名为datafile*, 同时创建实际 为1天之内的文件, 然后删除他们. find . -name "datafile" -ctime -1 -ok ls -l {} \; 这两个例子和上面的唯一区别就是-ok会在每个文件被执行命令时提示用户, 更加安全. find . -name "datafile" -ctime -1 -ok rm -f {} \; 1) find . -name 基于文件名查找,但是文件名的大小写敏感. find . -name "datafile*" 2) find . -iname 基于文件名查找,但是文件名的大小写不敏感. find . -iname "datafile*" 3) find . -maxdepth 2 -name fred 找出文件名为fred,其中find搜索的目录深度为2(距当前目录), 其中当前目录被视为第一层. 4) find . -perm 644 -maxdepth 3 -name "datafile*" (表示权限为644的, 搜索的目录深度为3, 名字为datafile*的文件) 5) find . -path "./rw" -prune -o -name "datafile*" 列出所有不在./rw及其子目录下文件名为datafile*的文件。 find . -path "./dir*" 列出所有符合dir*的目录及其目录的文件. find . \( -path "./d1" -o -path "./d2" \) -prune -o -name "datafile*" 列出所有不在./d1和d2及其子目录下文件名为datafile*的文件。 6) find . -user ydev 找出所有属主用户为ydev的文件。 find . ! -user ydev 找出所有属主用户不为ydev的文件,注意!和-user之间的空格。 7) find . -nouser 找出所有没有属主用户的文件,换句话就是,主用户可能已经被删除。 8) find . -group ydev 找出所有属主用户组为ydev的文件。

Shell脚本-Demo-29例

【例子:001】判断输入为数字,字符或其他 1.#!/bin/bash 2.read -p "Enter a number or string here:" input 3.case $input in 4. [0-9]) echo -e "Good job, Your input is a numberic! \n" ;; 5.[a-zA-Z]) echo -e "Good job, Your input is a character! \n" ;; 6. *) echo -e "Your input is wrong, input again! \n" ;; 7.esac 【例子:002】求平均数 1.#!/bin/bash 2.# Calculate the average of a series of numbers. 3.SCORE="0" 4.AVERAGE="0" 5.SUM="0" 6.NUM="0" 7.while true; do 8. echo -n "Enter your score [0-100%] ('q' for quit): "; read SCORE; 9. if (("$SCORE" < "0")) || (("$SCORE" > "100")); then 10. echo "Be serious. Common, try again: " 11. elif [ "$SCORE" == "q" ]; then 12. echo "Average rating: $AVERAGE%." 13. break 14. else 15. SUM=$[$SUM + $SCORE] 16. NUM=$[$NUM + 1] 17. AVERAGE=$[$SUM / $NUM] 18. fi 19.done 20.echo "Exiting." 【例子:003】自减输出 1.[scriptname: doit.sh] 2.while (( $# > 0 )) 3.do 4. echo $* 5. shift 6.done 7./> ./doit.sh a b c d e 8. a b c d e 9. b c d e 10.c d e

shell程序设计

shell编程 教学要点 1.深入理解shell概念。 2.掌握linux下shell程序设计流程。 3.理解shell程序与C程序设计的区别。 4.掌握shell程序设计中用户变量和表达式的使用方法。一.Shell编程概述 问题1:请各位同学在home目录下创建5个目录,目录名称分别为student0,student1,student2,student3,student4.且修改它们的权限为所有用户都具有完全的操作权限。 问题2:请各位同学在home目录下创建100目录,目录名称为class1—class100. 解决办法:通过一个shell脚本程序来实现,程序如下,用vi编辑器建立一个firstshell文件,内容如下: #!/bin/bash //指明该程序被那个shell来执行! cd /home/shelldir //进入home/shelldir目录 mkdir newdir //在shelldir目录下新建newdir目录

i=0 //给变量i赋初值 while [ $i –lt 50 ]; do //循环,判断i是否小于50,成立继续循环 let i=i+1 //让i变量值增加1 mkdir /home/shelldir/newdir/student$i //在newdir目录下创建student1到student50 chmod 754 /home/shelldir/newdir/student$i done 保存文件,退出vi,通过执行#chmod a+x firstshell修改文件权限,赋予文件可执行权限,通过#./firstshell或者#/bin/bash firstshell来执行程序,查看程序运行结果。 程序说明: 1.程序必须以下面的行开始(必须方在文件的第一行): #!/bin/bash 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/bash来执行程序。 2.当编辑好脚本时,如果要执行该脚本,还必须使其可执行。要使脚本可执行,必须为脚本添加可执行权限。

AIX最常用命令(中文注释)

AIX常用命令 目录操作 命令名功能描述使用举例 mkdir 创建一个目录mkdir dirname "mkdir yaohc/test" rmdir 删除一个目录rmdir dirname "rmdir yaohc/test" mvdir 移动或重命名一个目录mvdir dir1 dir2 "mvdir test testcopy" cd 改变当前目录cd dirname pwd 显示当前目录的路径名pwd ls 显示当前目录的内容ls -la dircmp 比较两个目录的内容dircmp dir1 dir2 文件操作 命令名功能描述使用举例 cat 显示或连接文件cat filename pg 分页格式化显示文件内容pg filename more 分屏显示文件内容more filename od 显示非文本文件的内容od -c filename cp 复制文件或目录cp file1 file2 rm 删除文件或目录rm filename "rm -r test" mv 改变文件名或所在目录mv file1 file2 "mv copytest copy" ln 联接文件ln -s file1 file2 find 使用匹配表达式查找文件find . -name "*.c" -print

file 显示文件类型file filename 选择操作 命令名功能描述使用举例 head 显示文件的最初几行head -20 filename tail 显示文件的最后几行tail -15 filename cut 显示文件每行中的某些域cut -f1,7 -d: /etc/passwd colrm 从标准输入中删除若干列colrm 8 20 file2 paste 横向连接文件paste file1 file2 diff 比较并显示两个文件的差异diff file1 file2 sed 非交互方式流编辑器sed "s/red/green/g" filename grep 在文件中按模式查找grep "^[a-zA-Z]" filename awk 在文件中查找并处理模式awk '{print $1 $1}' filename sort 排序或归并文件sort -d -f -u file1 uniq 去掉文件中的重复行uniq file1 file2 wc 统计文件的字符数、词数和行数wc filename nl 给文件加上行号nl file1 >file2 安全操作 命令名功能描述使用举例 passwd 修改用户密码passwd chmod 改变文件或目录的权限chmod ug+x filename

相关文档
最新文档