经典shell 脚本实例

经典shell 脚本实例
经典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的相关信息。这个脚本首先提示用户选择查询依据,比如文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,包的信息等。然后询问是否继续查询,是则循环刚才的过程,否则退出。

#!/bin/bash

# favourite OS. samli 2004.4.19

echo "What is your favourite OS?"

select var in "Linux" "UNIX" "Windows" "Other"; do

echo "You have selected $var."

#break

done

# !/bin/bash

# list a content summary of a number of RPM packages samli 2004.4.19 # USAGE: showrpm rpmfile1 rpmfile2 ...

# EXAMPLE: showrpm /cdrom/Thizlinux/RPMS/*.rpm

for rpmpackage in $*;

do

if [ -r "$rpmpackage" ];

then

echo "=============== $rpmpackage =============="

/bin/rpm -qip $rpmpackage

else

echo "ERROR: cannot read file $rpmpackage"

fi

done

#!/bin/bash

if [ $# -le 0 ]

then

echo "Not enough parameters"

exit 1

fi

#string="2 3 4 5 6"

#set string

sum=0

while [ $# -gt 0 ]

do

sum=`expr $sum + $1`

shift

done

echo $sum

#! /bin/bash

echo "*******************************"

echo "Please select your operation:"

echo " 1 Copy"

echo " 2 Delete"

echo " 3 Backup"

echo "*******************************"

read op

case $op in

C)

echo "your selection is Copy"

;;

D)

echo "your selection is Delete"

;;

B)

echo "your selection is Backup"

;;

*)

echo "invalid selection"

esac

#! /bin/sh

while true

do

echo "*******************************"

echo "Please select your operation:"

echo " 1 Copy"

echo " 2 Delete"

echo " 3 Backup"

echo " 4 Quit"

echo "*******************************"

read op

case $op in

C)

echo "your selection is Copy"

;;

D)

echo "your selection is Delete"

;;

B)

echo "your selection is Backup"

;;

Q)

echo "Exit ..."

break

;;

*)

echo "invalid selection,please try again"

esac

done

#! /bin/sh

a=10

b=20

c=30

value1=`expr $a + $b + $c`

echo "The value of value1 is $value1"

value2=`expr $c / $b`

echo "The value of value2 is $value2"

value3=`expr $c * $b`

echo "The value of value3 is $value3"

value4=`expr $a + $c / $b`

echo "The value of value4 is $value4"

var4=`expr $value4 - $value2`

echo $var4

#! /bin/sh

sum=0

for i in $*

do

sum=`expr $sum + $i`

done

echo $sum

abc=123

echo $abc

###定义函数

example1()

{

abc=456

}

###调用函数

example1

echo $abc

abc=234234

example1

echo $abc

###定义函数,使用参数

example2()

{

echo $1

echo $2

}

###调用函数,向它传递参数example2 abc bbb

example2 dksdfsdfsfaa bbb

#!/bin/bash

echo "please input a file name:"

read file_name

if [ -d $file_name ]

then

echo "$file_name is a directory"

elif [ -f $file_name ]

then

echo "$file_name is a regular file"

elif [ -c $file_name -o -b $file_name ] then

echo "$file_name is a device file"

else

echo "$file_name is an unkonwn file" fi

#! /bin/sh

read first second third

echo "the first parameter is $first" echo "the second parameter is $second" echo "the third parameter is $third"

#! /bin/sh

if [ $# -ne 2 ]; then

echo "Not enough parameters"

exit 0

fi

if [ $1 -eq $2 ]; then

echo "$1 equals $2"

elif [ $1 -lt $2 ]; then

echo "$1 less than $2"

elif [ $1 -gt $2 ]; then

echo "$1 greater than $2"

fi

#clear

#:trap "" 2 18 20 24

#e cho "***********************************************************************" #e cho " HI! You changed my root password"

#e cho " This is a little punishment for you then you can use the shell"

#e cho " You must answer my three questions and type "yes" or "no" to answer"

#

#answer="no"

#

#e cho "***********************************************************************" #e cho "Please press "Enter" key to continue"

#read

#while [ $answer = "no" ]

#do

# echo

# echo "1.Are you a boy ? (yes/no)"

# read answer

#done

#

#answer="no"

#

#until [ $answer = "yes" ]

#do

# echo

# echo "2.Are you foolish ? (yes/no)"

# read answer

#done

#

#answer="no"

#

#until [ $answer = "yes" ]

#do

# echo

# echo "3.Do you love me ? (yes/no)"

# read answer

#done

#

#e cho "***********************************************************************" #e cho

#e cho "Now ! I know you are a foolish girl and you love me."

#e cho

#e cho "So you can continue"

#e cho

#e cho "**************************************************************"

#e cho

#sleep 3

#e cho " (haha ! It is just a joke)"

i=1

echo "this time i is not equal to 4"

while [ $i -le 8 ]

do

((i=i+1))

if [ $i -eq 4 ]

then

echo "this time i is equal to 4"

continue

fi

echo "this time i is not equal to 4"

done

echo "The command is $0"

echo "The first argument is $1, the second argument is $2" echo "The entire command is $0 $1 $2"

echo "And there are $# arguments"

echo "The end of testing"

#! /bin/sh

if [ $# -gt 1 ]

then

echo "Too many parameters"

exit 1

fi

if [ $# -eq 0 ]

then

echo "Too few parameters"

exit 100

fi

if [ ! -d $1 ]

then

echo "Usage : $0 directory"

exit 1

fi

#for i in $1/*

#do

# if [ -x $i -a ! -d $i ]

# then

# ls $i

# fi

#done

#!/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: "

option=$option"f"

read argument

break

;;

package\ name)

echo -n "please input package name: "

read argument

break

;;

*)

echo "please choose between 1-3"

;;

esac

done

echo "what do you want to know?"

select var in "location" "info" "package name"

do

case $var in

location)

option=$option"l"

break

;;

info)

option=$option"i"

break

;;

package\ name)

break

;;

*)

echo "please choose between 1-3"

;;

esac

done

${RPM} $option $argument

echo "continue? [yes/no]"

read answer

if [ answer = "no" ]

then

break

fi

done

#!/bin/sh

sum=0

for a in `seq 1 100`

do

if [ `expr $a % 3` -ne 0 ]

then

continue

fi

echo $a

sum=`expr $sum + $a`

done

echo "sum = $sum"

#!/bin/bash

ftype=`file "$1"`

case "$ftype" in

"$1: Zip archive"*)

/usr/bin/unzip "$1" ;;

"$1: gzip compressed"*)

/bin/gunzip "$1" ;;

"$1: bzip2 compressed"*)

/usr/bin/bunzip2 "$1" ;;

*)

echo "Sorry, file $1 can not be uncompressed with smartzip." ;;

esac

注:上面有一行,for a in `seq 1 10`,其中seq 1 10 , 即列出现1到10之间所有的数字,这一行也可改为:for a in "1 2 3 4 5 6 7 8 9 10", 在用expr 进行乘法运算时,为了避免* 被看成匹配符,需要对其进行转义,用\*

自动备份数据库脚本两个!

MySQL:Linux下自动备份数据库的shell脚本Linux 服务器上的程序每天都在更新MySQL 数据库,于是就想起写一个shell 脚本,结合crontab,定时备份数据库。其实非常简单,主要就是使用MySQL 自带的mysqldump 命令。

脚本内容如下:

#!/bin/sh

# File: /home/mysql/backup.sh

# Database info

DB_NAME="test"

DB_USER="username"

DB_PASS="password"

# Others vars

BIN_DIR="/usr/local/mysql/bin"

BCK_DIR="/home/mysql/backup"

DA TE=`date +%F`

# TODO

$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BCK_DIR/db_$DATE.gz

然后使用将此脚本加到/etc/crontab 定时任务中:

01 5 * * 0 mysql /home/mysql/backup.sh

好了,每周日凌晨5:01 系统就会自动运行backup.sh 文件备份MySQL 数据库了。

/home/www/inc/back

第二个!!!!

#!/bin/sh

# File: /home/mysql/backup.sh

# Database info bakupmysql

DB_USER="user"

DB_PASS="password"

# Others vars

DA TE=`date +%Y-%m-%d`

mkdir /home/mysqlbak/$DATE

BIN_DIR="/usr/local/mysql/bin"

BCK_DIR="/home/mysqlbak/$DATE"

# TODO

$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS discuz > $BCK_DIR/discuz.sql $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS zjblog > $BCK_DIR/zjblog.sql $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS openads > $BCK_DIR/openads.sql

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

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 是如何完成命令解释的。

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 查看安装软件时下载包的临时存放目录

习题07_Shell编程

习题07_Shell编程 一、单选 1. 下面哪个命令是用来定义shell的全局变量( D )。 A. exportfs B. alias C. exports D. export 2.在Shell脚本中,用来读取文件内各个域的内容并将其赋值Shell变量的命令是(D )。 A. fold B. join C. tr D. read 3. 当字符串用双引号(’’)括起来时,SHELL将(C )。 A. 解释引号内的特殊字符 B. 执行引号中的命令 C. 不解释引号内的特殊字符 D. 结束进程 4. 以下哪个环境变量表示当前路径( B )。 A. PATH B. PWD C. HOME D. ROOT 5. shell不仅是(用户命令的解释器),它同时也是一种功能强大的编程语言,(bash )是Linux的缺省shell。 6. 编写的Shell程序运行前必须赋予该脚本文件(执行)权限。 7. 对于Shell脚本程序,若输入参数数量多于9个,则程序遍历每个参数可通过使用(shift )命令实现。 8. 为脚本程序指定执行权的命令及参数是( chmod a+x filename )。 9. 在shell编程时,使用方括号表示测试条件的规则是:方括号两边必有(空格)。 10. 输入了Shell命令的部分字符后按( tab )键可补全其余部分。 11.改变命令提示符的环境变量是(PS1 )。 11. grep -E '[Hh]enr(y|ietta)' file的功能是:(在文件File中查找Henry、henry、Henrietta或henrietta)。 12. 如下为命令终端下的一个截图: 则,以下两句的执行结果是:(the home path is $HOME )。 path=‘the home path is $HOME’ echo $path 13. 以下为程序名为prog的程序内容。则sh prog a b c d的执行结果为( C )。 set A B C D shift shift echo $1 三、简答 1. 下面给出了一个SHELL程序,试对其行后有#(n)形式的语句进行解释,并说明程序完成的功能。

经典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的相关信息。这个脚本首先提示用户选择查询依据,比如文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,包的信息等。然后询问是否继续查询,是则循环刚才的过程,否则退出。

c语言模拟shell命令行解释程序

北京联合大学 《操作系统课程设计》实验一:命令行解释程序 学院:信息学院专业:计算机科学与技术 课程:操作系统班级: 1 1 0 3 B 姓名:傅笔贵学号: 2009080305302 2014年7 月10 日

一.采用的数据结构说明 字符数组: 本程序中包含的字符数组有: filename1[20]:在Ccopy()函数中,存储源文件路径和名字的字符数组。 filename2[20]:在Ccopy()函数中,存储目标文件路径和名字的字符数组。 oldname[20]:在Cmv()函数中用来保存源文件路径和名字的字符数组。 newname[20]:在Cmv()函数中用来保存目标文件路径和名字的字符数组。 Cho2[6]:存取用户输入的指令,并用来作为Switch分支的判定条件之一。 File[20]:Cerase()函数中用来存放要删除的文件的路径和名字的字符数组。 Word[100]:在Cdis()中存放用户要回显的字符串。 二.源程序清单、注释和流程图 (1)流程图

(2)源程序和注释 #include #include #include #include #include #include #include int flag=1; char ch[8];//存储文件读取内容的中间变量 FILE *fp; FILE *fp1; char filename1[20];/*复制文件候存放的原文件名*/ char filename2[20];/*复制文件候存放的目标文件名*/ char oldname[20];/*用来存放移动文件的源文件名*/ char newname[20];/*用来存放移动文件的目标文件名*/ void start_copy(char *filename1,char *filename2) /*文件复制函数,可以实现文本和图片的复制*/ { if((fp=fopen(filename1,"rb"))==NULL||(fp1=fopen(filename2,"wb"))==NUL L) /*源文件或目标文件打开失败则无法进行复制*/ { printf("can't open the source file!\n"); exit(0); } else { fread(ch,1,8,fp);//一次读取八个字节的字节流,存放到ch字符数组里 while (!feof(fp))//没读取到文件尾部时,持续读取 { fwrite(ch,1,8,fp1);//写到目标文件里 fread(ch,1,8,fp);//继续读取 } fclose(fp);//关闭指针,释放内存 fclose(fp1); } }

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 !

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的文件。

第六章 dc_shell综合脚本

第六章dc_shell命令解释程序 第一节设计目标 6-1-1背景介绍 dc_shell 是Synopsys Design Compiler的shell(命令解释程序),与unix的shell 类似。Unix的C shell 和Bourne-shell作为命令解释程序,在用户和unix 核之间实现了功能极强的接口程序。相同地,Dc_shell最为Synopsys Design Compiler的功能极强的命令解释程序。象unix shell 提供程序设计语言在unix 文件系统中操作一样,dc_shell 提供script(脚本)语言在Design Compiler 的设计中操作,且仿造unix shell 的相同的结构。 用dc_shell 脚本综合设计有许多优点:首先,脚本执行速度比象design analyzer 交互式的界面快得多,脚本也用来证明综合设计的过程。更重要的是,脚本提供一个重复编译的机制,这不仅对设计的再利用重要,而且对于当要求一项函数改变时,再次产生设计文件的所要求的时间最小化也很重要。 所有的这些优点源于使用脚本自动走完综合流程。但是,dc_shell 脚本能够做的远不只这些,它能扩展Design Analyzer和Design Compiler的功能。一些Design compiler命令的顺序由脚本得出。大多数经验丰富的Synopsys的用户将脚本和Design analyzer结合使用来分析和优化设计。 6-1-2 目标程序类型的审阅 dc_shell脚本生成设计目标程序和编译属性来引导综合流程。当编写dc_shell脚本时,考虑正在运行的目标程序/信息的类型是很重要的。这一节从“Design Compiler Family Reference Manual”的章节中总结了“design compiler”的概念。 6-1-2-1 实例、网络、端口 原理图由三个基础的构件组成:实例、网点、端口。实例是代表逻辑子程序或层次的符号,网络是代表在实例之间有电气连续性的导线,端口是用来代表层次连续性的线路终结器。这些都是标准的术语。使设计者感到新颖的是reference 的概念。 6-1-2-2 单元、引用、设计 如果一实例代表一逻辑子程序,则它能代表什么类型的子程序呢?一实例能代表一库元件或一设计。用许多术语描述设计是必须的因为一设计可能包含同一库元件(或子设计)的多重实例。 举例说,一典型设计包含与非门,设计中的每一门实例都被赋予唯一的单元名用来在非唯一的实例中彼此区分。同样的,一设计可能包含多个加法器,与与非门不同,加法器一般来说不是库元件,加法器是一个可逐步分解成库元件和网络且相互连接后执行加法器功能的完全设计。与库元件相同,每一子设计的实例都被赋予唯一的单元名。 库元件是无形的设计子程序且在设计中常被做为节点单元引用。设计是逻辑块,它们可作为独立的设计或作为更大设计的子设计。作为其它设计中连接上下关系的子模块,设计中每一个唯一的实例被作为一个分层次的单元引用。在一个单独设计的上下关系中,每一个实例具有唯一的单元名,这些单元引用库元件或设计。设计者可以对每个单元单独地进行优化,也可以通过布置属性或约束(在以下定义)对每个库元件或设计进行优化。但是,属性被直接加至库元件或设计中,这可能影响包含引用这些库元件或设计的每一个设计。 图6.1 单元、引用、设计之间的关系 假设你想要影响一个单独设计中的每一个与非门的优化而没有影响其它设计中的与非门则将会如何呢?引用的概念使这成为可能,设计中的每一个单元不仅是库元件中或设计中唯一命名的实例,而且是引用库元件或设计的一系列单元中的一员。 参考以下图6.2的设计: 图6.2脉动计数器:count_16 这个分层次设计的顶层是一个16位的计数器,顶层设计由与非门、或非门、8位计数器组成。在这层次设计的关系

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

实验3_shell程序设计

实验三shell程序设计目的 1.理解shell操作环境 2.掌握shell程序编写方法 内容 1.练习、理解下面命令 history history 20 !! !vi alias alias ld=’ls -ld’ { date;pwd;tty;stty; } > file1 echo ”123*456+789” | bc var1=”abcd1234” echo ${var1:3:4} var2=${var1:=”abcd1200”} echo $var2 echo ”$HOME $PWD” echo ”我的主目录是$HOME” echo ”当前目录是$PWD” arr1=(long live chair mao) echo ${arr1[1]} arr2=(`date`) echo ${arr2[3]} echo ${arr1[*]} echo ${arr1[@]} echo $$ echo $? [ $? -eq 0 ] || echo ”上面命令执行失败。”

2.编写shell程序,按要求文件名保存在个人中目录下“实验3”子目录下。 1)文件名feb.sh,输出数列1 1 2 3 5 8 13 …前30项; 2)录入、阅读、运行程序dust.sh,理解程序的意义。dust.sh代码如下: #!/bin/bash If [ $# -eq 0 ] then echo ”指定一个文件名。” else gzip $1 #压缩文件 mv $1.gz $HOME/dustbin echo ”文件$1被删除!” fi exit 0 3)文件名colle.sh,收集2016 级学生实验3编写程序文件。学生用户的名称是学生学号,如2016012999,用户主目录是/home/学号(如/home/2016012999)。将学生用户主目录下“实验3”子目录中文件feb.sh(有些学生为有该文件,有些学生没有)复制用户主目录下,并改名为“学号_feb.sh”(如2016012999_feb.sh)。 3.阅读理解程序,程序文件在主机202.117.179.233,目录/var/materials下。 实验报告书写指导 1.将你对操作、显示信息的理解写在操作命令后; 2.实验报告提交到202.117.179.110; 3.编写的shell程序保存在个人目录下“实验3”子目录中。

LinuxShell脚本编程实例

#! /bin/sh echo "Current command is $0" echo "The first parameter is $1" echo "The second parameter is $2" echo "The third parameter is $3" echo "Total of parameters if $#" echo "Current PID is $$" #!/bin/bash times=0 until [ "$times" = 3 ]; do echo "I love linux." sleep 2 times=`expr $times + 1` done #!/bin/bash # menu shell script. samli 2004.4.19 until echo "List Directory..........1" echo "Change Directory........2" echo "Edit File...............3" echo "Remove File.............4" echo "Exit Menu...............5" read choice test $choice = 5 do case $choice in 1) ls;; 2) echo "enter target directory:" read dir cd $dir ;; 3) echo "enter file name:" read file vi $file ;; 4) echo "enter file name:" read file rm $file ;; 5) echo "Goodbye"

PowerShell基本语法及常用命令

PowerShell基本语法及常用命令 Powershell常用命令 1.Get-Command 得到Powshell所有命令 2.Get-Process 获取所有进程 3.Set-Alias 给指定命令重命名如:Set-Alias aaa Get-Command 4.Set-ExecutionPolicy remotesigned 设置powershell可直接执行脚本文件一般脚本文件以.ps1结尾执行脚本文件直接输入文件地址即可执行脚本文件中只写命令即可 5.Get-Help get-* 查询以get开头的命令Get-Help *service* Get-Help Get-Command 获取Get-Command命令的基本用法 6.Get-Member 获取对象属性如: $var | Get-Memeber 访问$var属性直接$var.T oString() PS中的变量定义 不需要定义或声明数据类型 在变量前加"$" 定义变量的规则 -变量可以是数字$123 -变量可以是字符串$abc -变量可以是特殊字符${@1b} 内置的变量 -$pshome -$home

-$profile 变量赋值: $var=123 $var="aaaaaa" 取变量值: $var 变量赋值方法:Set-Variable var 100 取值方法: Get-Variable var 清空值: Clear-Variable var 删除变量Remove-Variable var 取多个变量如var1 var2 var3地值: Get-Variable var* 另一种赋值方法$var1="bbb" $var2="$var $var1" 结果$var2="aaaaaa bbb" $var2='$var $var1' 结果$var2="$var $var1" $date=Get-Date 获取当前时间 $date.AddDays(3) 当前时间加3天 排序用法 Get-Process | Sort-Object ws 根据WS值由小到大排序 Get-Process | Sort-Object | fl Get-Process | Sort-Object | Format-List 以列表形式显示数据 导入导出文件 Get-Process > c:\aa.txt

Shell脚本例子集合

# vi xx.sh 退出并保存 # chmod +x xx.sh # ./xx.sh -2.调试脚本的方法 # bash -x xx.sh就可以调试了. -1.配置secureCRT的设置(我用的是6.2.3 build313版本,汉化版) 选项->会话选项(S)...->终端->仿真->终端(T)->把VT100改成Xterm->点中ANSI 颜色(A)和使用颜色方案(U)复选框. 这样就有颜色显示了. 选项->会话选项(S)...->终端->外观->字符编码(H)->从Default变到UTF-8. 这样就有中文显示了. 1.写一个脚本,执行后,打印一行提示"Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值.直到用户输入"end"停止. # vi show_var.sh 脚本内容: #!/bin/bash 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 命令保存后退出,并执行: # chmod +x show_var.sh # ./show_var.sh please input a number: 1 var is 1 please input a number: s var is s please input a number: end # 2.写一个脚本,测试位置参数

shell常用命令

目录 一、目录操作 a) ls--查看文件/目录: 常用:ls –l 查看详细文件列表 b) pwd--查看当前目录: c) cd--改变工作目录: 常用①:cd ../ 跳转到上一级目录 常用②:cd /boot/ 跳转到指定目录 d) mkdir--创建目录: 常用:mkdir 123 创建一个空文件夹 e) rm--删除文件/目录: 常用: rm -rf 123 删除目录文件夹,并且目录下的文件一并删除。 f) mv--移动文件/目录改名、移动: 移动文件: mv 1.sh ./123 → mv 目标文件移动至某目录 重名命文件:mv 1.sh 123.sh → mv 原文件欲改后文件 g) ln--建立软连接和硬连接: 软连接:ln -s 123.sh ../ → ln -s 源文件欲放置路径 硬连接:ln 123.sh ../ → ln 源文件欲放置路径 h) rmdir--删除空目录: 二、文件操作 a)cat--查看文件内容,若文件不存在,创建对应文件: 常用:cat 1.txt b)cp--拷贝文件、目录: 备份:cp 123.sh 1.sh → cp 源文件目标文件 复制至某路径:cp 123.sh ../ → cp 源文件目标路径 c)chmod--修改文件权限: 常用:chmod 777 1.sh 给1.sh最高权限 一般模式:chmod +rw 1.sh 仅当前用户下1.sh具有可读写权限 d)touch--创建文件: 常用:touch ./1.sh → touch 路径+名称 f)vim--创建并打开文件: 常用:vim ./1.sh → vim 路径+名称 g)find--在指定目录查找符合条件的文件: 以[文件名+类型]寻找:find ./ -name “*.*”→ find 路径 -nama

shell常用命令大全

一、文件目录类命令 1、查看联机帮助信息 man命令如:#man ls info命令如:#info cd 2、列出当前目录或指定目录的文件名和目录名 ls[选项]文件或目录 常用[选项]如下: -a:显示所有的文件,包括以“.”开头的隐含文件。 -l:长格式输出 -m:宽行输出 -F:以各种符号表示不同的文件类型 --color:彩色输出 -R:递归输出 3、touch 功能:修改文件的创建日期或以当前系统日期创建一个空文件。 -d:修改文件的日期。 #touch–d2*******test.txt 4、cp 功能:复制文件 用法:cp[选项]源文件或目录目标文件或目录 选项: a:该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地

拷贝目录,其作用等于dpR选项的组合。 -d拷贝时保留链接。 -f删除已经存在的目标文件而不提示。 -i和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。 -p此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。 -r若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。 5、mv 功能:给文件或目录改名或将一个文件或目录移到另一个目录 用法:mv[选项]源文件或目录目标文件或目录 -i交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答y或n,这样可以避免误覆盖文件。-f禁止交互操作。在mv操作要覆盖某已有的目标文件时不给任何指示,指定此选项后,i选项将不再起作用。 6、rm 功能:删除文件或目录 用法:rm[选项]文件… -f强制删除 -r指示rm将参数中列出的全部目录和子目录均递归地删除。 -i进行交互式删除

题目1 shell 程序设计

题目1 shell 程序设计 1.1 实验目的 Linux操作系统中shell是用户与系统内核沟通的中介,它为用户使用操作系统的服务提供了一个命令界面。用户在shell提示符($或#)下输入的每一个命令都由shell先解释,然 后传给内核执行。本实验要求用C语言编写一个简单的shell程序,希望达到以下目的: ●用C语言编写清晰易读、设计优良的程序,并附有详细的文档。 ●熟悉使用Linux下的软件开发工具,例如gcc、gdb和make。 ●在编写系统应用程序时熟练使用man帮助手册。 ●学习使用POSIX/UNIX系统调用、对进程进行管理和完成进程之间的通 信,例如使用信号和管道进行进程间通信。 ●理解并发程序中的同步问题。 ●锻炼在团队成员之间的交流与合作能力。 1.2 实验要求 1.2.1 ysh解释程序的重要特征 本实验要实现一个简单的命令解释器,也就是Linux中的shell程序。实验程序起名为ysh,要求其设计类似于目前流行的shell解释程序,如bash、csh、tcsh,但不需要具备那么复杂的功能。ysh程序应当具有如下一些重要的特征: ●能够执行外部程序命令,命令可以带参数。.。 ●能够执行fg、bg、cd、history、exit等内部命令。 ●使用管道和输入输出重定向。 ●支持前后台作业,提供作业控制功能,包括打印作业的清单,改变当前 运行作业的前台/后台状态,以及控制作业的挂起、中止和继续运行。 除此之外,在这个实验中还须做到: ●使用make工具建立工程。 ●使用调试器gdb来调试程序。 ●提供清晰、详细的设计文档和解决方案。 1.2.2 ysh解释程序的具体要求 1. Shell程序形式 本实验的ysh程序设计不包括对配置文件和命令行参数的支持。如果实现为像bash那样支持配置文件,当然很好,但本实验并不要求。ysh应提供一个命令

shell程序设计(通信)1

Shell程序设计 本章的学习目标 ●了解shell的地位和作用 ●熟练掌握shell脚本的建立与执行方法 ●掌握shell的变量及特殊字符 ●掌握shell的输入输出命令 ●掌握shell程序逻辑结构语句 主要内容 ● Shell概述 ● Shell的变量 ● Shell中的特殊字符 ●Shell编辑中的输入输出命令 ● Shell结构控制语句 Shell简介 1、Shell的功能(1)作为命令解释程序 (2)作为一种高级程序设计语言 shell是一种命令行解释程序,它提供了用户与操作系统之间基于命令行的交互界面。用户命令行输入命令,由SHELL对它们做出解释,并将其送往操作系统去执行。然而,它不仅仅是一种交互式语言,它还是一种可编程的程序设计语言。将若干个shell命令写入一个文件就构成了一个shell程序,它可以被shell逐条的解释执行。 Shell简介 shell程序可以使用各种变量、参数和控制结构来组织命令流程,自动化的完成各种复杂冗繁的处理工作。 shell是基于字符串的语言:只做字符串处理,不支持复杂的数据结构和运算。Shell 输出也全部是字符方式。 2、Shell的主要版本:sh csh ksh 在linux系统中流行的使用的shell主流是Bash,它是Bourne Again Shell的缩写,bash 是由bourne shell发展而来的,但是它包含了csh和ksh的特性。 shell脚本的建立与执行 ●shell脚本的建立 ●Shell脚本是文本文件,可以用任何文本编辑器建立和编辑脚本,shell脚本文件 的名称没有限定的扩展名,通常不带扩展名或带“.sh”扩展名。 ●①vi shell脚本名 ●②cat >文件名 ●。。。。。 Ctrl+d 例9.1 第1个Shell程序: $ cat hello #hello程序 # This is a shell script to say hello. echo Hello World! echo -n “Today is ” date “+%A, %B %d, %Y.” $ . hello #运行hello程序 Hello World!

相关文档
最新文档