文档库 最新最全的文档下载
当前位置:文档库 › Linux-Unix shell 脚本清除归档日志文件

Linux-Unix shell 脚本清除归档日志文件

Linux-Unix shell 脚本清除归档日志文件
Linux-Unix shell 脚本清除归档日志文件

Linux/Unix shell 脚本清除归档日志文件

作者:robinson_0612

对于DEV以及UAT环境,有些时候,数据库需要处于归档模式,但并不需要备份数据库。因此,archive归档日志不停的增长导致磁盘空间被大量耗用。对于这种情形,可以使用一个shell脚本来定时自动清除这些归档日志。本文给出了清除归档日志的脚本。

1、清除归档日志shell脚本

[python]view plaincopyprint?

1.robin@SZDB:~/dba_scripts/custom/bin> more remove_arch_dum

p.sh

2.#!/bin/bash

3.# -------------------------------------------------------

-----+

4.# FileName: remove_arch_dump.sh

|

5.# Desc:

|

6.# Remove old archived log and data pump file

|

7.# Usage:

|

8.# ./remove_arch_dump.sh

|

9.#

|

10.# Authror : Robinson

|

11.# Blog : https://www.wendangku.net/doc/c75318618.html,/robinson_0612

|

12.# ------------------------------------------------------

------+

13.

14.filename=/etc/oratab

15.

16.cat $filename | while read LINE

17.do

18. case $LINE in

19. \#*) ;; #comment-line in o

ratab

20. *)

21. ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`

22. echo $ORACLE_SID

23.

24.# ---------------------------------

25.# define archived log directory

26.# ---------------------------------

27. dir=/u02/database/$ORACLE_SID/archive/

28. echo $dir

29.

30. filelist=`ls -t $dir`

31. echo $filelist

32.

33.# ----------------------------------------------

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

34.# start to remove archived log and keep last 2 a

rchived log

35.# ----------------------------------------------

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

36. count=0

37.for filename in $filelist

38. do

39. echo $filename

40. count=$(($count+1))

41.if [ $count -gt 2 ]; then

42. echo $count

43. rm -vrf $dir$filename

44. fi

45. done

46. ls -tr $dir

47.

48.# --------------------------------

49.# define data pump dump directory

50.# --------------------------------

51. dir=/u02/database/$ORACLE_SID/BNR/dump/

52. echo $dir

53.

54. filelist=`ls -t $dir`

55. echo $filelist

56.

57.# ----------------------------------------------

-----------

58.# start to remove data pump file and keep last 5

dump file

59.# ----------------------------------------------

-----------

60. count=0

61.for filename in $filelist

62. do

63. echo $filename

64. count=$(($count+1))

65.if [ $count -gt 5 ]; then

66. echo $count

67. rm -vrf $dir$filename

68. fi

69. done

70. ls -tr $dir

71.

72. ;;

73. esac

74.done

75.exit

2、脚本说明

a、该脚本通过一个外部循环来读取oratab中定义的数据库的SID来寻找对应数据库的归档日志路径以及datapump dump路径。

b、使用了一个for循环来清除归档日志,且保留最后的2个归档日志文件。

c、接下来的另一个for循环则用来清除当前SID下对应的dump(Oracle datapump)目录下导出的dump文件。

d、同清除归档日志一样,设定了保留dump目录最近的5个文件。保留多少个最近的文件(dump的5,或者归档日志2)可以修改。

e、如果不需要清除dump路径,可以将dump部分注释掉。

f、根据需要将其部署到crontab。

更多参考

PL/SQL -->游标

PL/SQL -->隐式游标(SQL%FOUND)

批量SQL之 FORALL 语句

批量SQL之 BULK COLLECT 子句

PL/SQL 集合的初始化与赋值

PL/SQL 联合数组与嵌套表

PL/SQL 变长数组

PL/SQL --> PL/SQL记录

SQL tuning 步骤

高效SQL语句必杀技

父游标、子游标及共享游标

绑定变量及其优缺点

dbms_xplan之display_cursor函数的使用

dbms_xplan之display函数的使用

执行计划中各字段各模块描述

使用 EXPLAIN PLAN 获取SQL语句执行计划Oracle ROWID

NULL 值与索引(一)

NULL 值与索引(二)

启用 AUTOTRACE 功能

函数使得索引列失效

Oracle 绑定变量窥探

Oracle 自适应共享游标

Oracle 表空间与数据文件

Oracle 密码文件

Oracle 参数文件

Oracle 联机重做日志文件(ONLINE LOG FILE) Oracle 控制文件(CONTROLFILE)

Oracle 归档日志

Oracle 回滚(ROLLBACK)和撤销(UNDO)

Oracle 数据库实例启动关闭过程

Oracle 10g SGA 的自动化管理

Oracle 实例和Oracle数据库(Oracle体系结构)

大升刷票https://www.wendangku.net/doc/c75318618.html,整理

Shell脚本编写基础

Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell 是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统的关键。可以说,shell使用的熟练程度反映了用户对Linux使用的熟练程度。 一、什么是shell 当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shel l(外壳)的程序。那么,shell是什么呢?确切一点说,shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell 来启动、挂起、停止甚至是编写一些程序。 当用户使用Linux时是通过命令来完成所需工作的。一个命令就是用户和shell之间对话的一个基本单位,它是由多个字符组成并以换行结束的字符串。shell解释用户输入的命令,就象DOS里的https://www.wendangku.net/doc/c75318618.html,所做的一样,所不同的是,在DOS中,https://www.wendangku.net/doc/c75318618.html,只有一个,而在Linux下比较流行的shell有好几个,每个shell都各有千秋。一般的Linux系统都将bash作为默认的shell。 二、几种流行的shell 目前流行的shell有ash、bash、ksh、csh、zsh等,你可以用下面的命令来查看你自己的shell类型: #echo $SHELL $SHELL是一个环境变量,它记录用户所使用的shell类型。你可以用命令: #shell-name 来转换到别的shell,这里shell-name是你想要尝试使用的shell的名称,如ash等。这个命令为用户又启动了一个shell,这个shell在最初登录的那个shell之后,称为下级的shell或子shell。使用命令: $exit 可以退出这个子shell。 使用不同的shell的原因在于它们各自都有自己的特点,下面作一个简单的介绍: 1.ash ash shell是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小shell,它只包含24个内部命令,因而使用起来很不方便。 2.bash bash是Linux系统默认使用的shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的缩写,内部命令一共有40个。Linux使用它作为默认的shell是因为它有诸如以下的特色: (1)可以使用类似DOS下面的doskey的功能,用方向键查阅和快速输入并修改命令。 (2)自动通过查找匹配的方式给出以某字符串开头的命令。 (3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。 3.ksh ksh是Korn shell的缩写,由Eric Gisin编写,共有42条内部命令。该shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。 4.csh

linux+shell脚本语言基础知识

linux shell脚本语言基础知识 一.shell简介 Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的界面,更确切的说,shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用Shell脚本编程,完成更加复杂的操作。 shell是一个命令解释器,它从输入设备读取命令,再将其转为计算机可以了解的指令,然后执行它。在linux中,shell又不仅是简单的命令解释器,而且是一个全功能的编程环境。 Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell (/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种就足够了。通常用Bash,也就是Bourne Again Shell进行编程。 二.shell使用 1.建立和运行shell程序 shell脚本程序:按照一定的语法结构把若干linux命令组织在一起,是这些命令按照我们的要求完成一定的功能。它可以进行类似程序的编写,并且不需要编译就能执行。(只需修改其权限) 像编写高级语言的程序一样,编写shell程序需要一个文本编辑器,如VI和VIM,通常使用VIM文本编辑器,支持更便利的插入模式。 首先使用VIM编辑器编辑一个hello.sh文件: #!/bin/bash #hello world example

linux-shell 脚本编写实验报告

实验报告 课程Linux基础及应用实验名称Linux Shell脚本编写第页 专业_计算机科学与技术__ 班级__6班_ 学号_105082009014_ 姓名林清萍 实验日期:2011年11 月3 日报告退发(订正、重做) 一、实验目的 1、掌握shell脚本编写的基本知识; 2、掌握shell脚本中变量的使用; 3、掌握shell脚本中引用命令行参数的方法; 4、掌握for循环、while循环、read命令的使用; 5、掌握命令扩展功能的使用。 二、实验内容 1、使用bash的for循环语句编写一脚本batchmkdir.sh,能实现以下功能:在当前目录中建立10个目录,目录的命名形式为dir-1、dir- 2、dir- 3、…..dir-10; 2、编写一个脚本batchuser.sh,能批量建立10个用户帐号,并给用户帐号设定8位的随机密码,同时把该用户名与密码保存到指定的文件中/root/user-pass.txt,以便管理员分发密码;其中帐号的形式为user-1、user-2、…user-10;保存用户名与密码的文件的每行的格式形式为:user-1:ChczVZww 提示:密码可以是命令"openssl rand -base64 7",把用户名与密码对保存到文件中可以使用输出重定向的方法:参考命令 echo “user-1: ChczVZww”>/root/user-pass.txt 3、在/root目录下编写脚本batchadduser.sh,实现以下功能:当用户以 ./ batchadduser stu 10 的方式运行脚本时,能自动添加stu1、stu2、stu3 …. stu10的10个帐号,设定8位的随机密码,并设置帐号的密码有效期为60天,下次登陆必须改密码。同时把该用户名与密码保存到指定的文件中/root/batch-user-pass.txt,密码文件的格式同第二题的要求。 4、编写一个shell脚本,实现以下功能:该脚本能读取usernamelist.txt中的用户列表(一行一个用户名)建立帐号,并给每个帐号设置8位随机密码,同时把该用户名与密码保存到指定userpass.txt 文件中,密码文件的格式同第二题的要求。 补充: usernamelist.txt用户列表该文件格式如下:(说明,每行一个用户名,) jack jason fried zike jicne ien

shell脚本练习题

shell脚本例子集锦(习题总结) 练习一:写一个脚本 1.设定变量FILE的值为/etc/passwd 2.依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么 形如:(提示:LINE=`wc -l /etc/passwd | cut -d" " -f1`) Hello,root,your UID is 0. 3.统计一个有多少个用户 答案一:#!/bin/bash file="/etc/passwd" LINES=`wc -l $file | cut -d" " -f1` for I in `seq 1 $LINES`;do userid=`head -$I $file | tail -1 |cut -d: -f3` username=`head -$I $file | tail -1 |cut -d: -f1` echo "hello $username,your UID is $userid" done echo "there are $LINES users" 答案二:#!/bin/bash file=/etc/passwd let num=0 for I in `cat $file`;do username=`echo "$I" | cut -d: -f1` userid=`echo "$I" | cut -d: -f3` echo "Hello,$username,your UID is $userid" num=$[$num+1] done echo "there are $num users" 练习二:写一个脚本 1.切换工作目录至/var 2.依次向/var目录中的每个文件或子目录问好,形如: (提示:for FILE in /var/*;或for FILE in `ls /var`;) Hello,log 3.统计/var目录下共有多个文件,并显示出来 答案:#!/bin/bash cd /var let num=0 for I in `ls /var/*`;do echo "hello $I" num=$[$num+1] done echo "the number of files is $num" 练习三:写一个脚本 1.设定变量file的值为/etc/passwd

实验十三 shell脚本练习

上机实验内容: 1、请编写一个脚本,其功能是将当前用户的根目录下的work目录打包为名为“user’s-workdir-in-YYMMDD”的tar包(提示:参考用date建立文件) 要求:i)若该目录不存在,显示“dir not exist” ii)若该文件不是目录类型,显示“work is a type”,此处的type为文件类型 #!/bin/bash [ -e /work ] && tar -cvf "User's-workdir-in-`date +%Y%m%d`.tar" /work || echo "dir not exist" declare filetype="" [ -f /work ] && filetype="常规文件" [ -d /work ] && filetype="目录文件" [ -b /work ] && filetype="块设备文件" [ -c /work ] && filetype="字符设备" [ -S /work ] && filetype="套接字文件" [ -p /work ] && filetype="FIFO(管道)文件" [ -L /work ] && filetype="连接文件" [ "$filetype" != "" ] && echo "work is a $filetype" 2、编写一个脚本,其中包含一个打印函数,用于将多次输入的字符组合为一个字符串 要求:i)使用函数实现新值的输出 ii)使用循环语句完成多个字符的输入,直到输入字符串EOF才完成字符串的累加#!/bin/bash function add(){ str="$str"$input echo $str } read -p "请输入一个字符串或者输入EOF结束本次操作:" input declare str while [ "$input" != "EOF" ] do add read -p "请输入一个字符串或者输入EOF结束本次操作" input done 3、自我练习:设计一个运算器,实现“加、减、乘、除”功能。 (四则运算:符号使用+、-、*、/) #!/bin/bash

Linux编写shell脚本if for while

Linux编写shell脚本if for while 使用if条件语句 If语句好处:可以根据特定条件来决定是否执行某项操作,当满足不同条件时执行不同操作, 相关条测试操作 Test 条件表达式 [ 条件表达式] [ ] 方括号与条件表达式需要用空格进行分隔 1.测试文件状态 -d 是否为目录 -e 文件是否存在 -f 是否为文件 -r 是否有读取的权限 -w 是否有写入权限 -x 是否有执行权限 -L 是否为链接文件 2. 整数值比较 -eq 等于 -ne 不等于 -gt 大于 -lt 小于 -le 小于等于 -ge 大于等于 3. 字符串比较 = 匹配 != 不匹配 -z是否为空 !用于取反 4逻辑测试 &&逻辑与(前后两个条件都为真时,结果才为真)

||逻辑或(有一个条件成立,结果即为真)!逻辑非(指定条件不成立,结果为真)if语句的结构 1.单分支的if语句 if条件测试命令 then 命令序列 fi 条件成立 执行then后一条或多条命令(命令序列)直到fi 表示结束 条件不成立 直接执行fi 条件成立 执行then后的一条或多条命令(命令序列)条件不成立 执行else后的一条或多条命令 直到fi 2.双分支的if语句 if 条件测试命令 then 命令序列1 else 命令序列2 fi 条件成立 执行then后的一条或多条命令(命令序列)

条件不成立 执行else后的一条或多条命令 直到fi 3.多分支的if语句(更多使用case语句来实现) 根据if语句条件测试命令的两种状态分别进行操作,嵌套使用, 条件1为真:执行then后的命令直到fi 条件1为假:执行elif后的条件2 条件2为真,执行命令2,直到fi 为假,执行else后的命令3直到fi if 条件测试命令1 then 命令序列1 elif 命令测试条件2 then 命令序列2 else 命令序列3 fi 根据if语句条件测试命令的两种状态分别进行操作,嵌套使用, 条件1为真:执行then后的命令直到fi 条件1为假:执行elif后的条件2 条件2为真,执行命令2,直到fi 为假,执行else后的命令3直到fi 将case后边的变量只与模式1、模式2 ………..等进行逐一比较,直到找到与之匹配的值,然后执行该模式下的命令序列,当遇到;;后跳转至esac后结束分支

shell脚本之前的基础知识

第十二章学习shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员。目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目。有的单位甚至用shell脚本的编写能力来衡量这个linux系统管理员的经验是否丰富。笔者讲这些的目的只有一个,那就是让你认真对待shell脚本,从一开始就要把基础知识掌握牢固,然后要不断的练习,只要你shell脚本写的好,相信你的linux求职路就会轻松的多。笔者在这一章中并不会多么详细的介绍shell脚本,而只是带你进入shell脚本的世界,如果你很感兴趣那么请到网上下载相关的资料或者到书店购买相关书籍吧。 在学习shell 脚本之前,需要你了解很多关于shell的知识,这些知识是编写shell脚本的基础,所以希望你能够熟练的掌握。 【什么是shell】 简单点理解,就是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。实际上,在shell和计算机硬件之间还有一层东西那就是系统内核了。打个比方,如果把计算机硬件比作一个人的躯体,而系统内核则是人的大脑,至于shell,把它比作人的五官似乎更加贴切些。回到计算机上来,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。 笔者接触的linux发布版本(Redhat/CentOS)系统默认安装的shell叫做bash,即Bourne Again Shell,它是sh(Bourne Shell)的增强版本。Bourn Shell 是最早行起来的一个shell,创始人叫Steven Bourne,为了纪念他所以叫做Bourn Shell,检称sh。那么这个bash有什么特点呢? 1)记录命令历史 我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令。这些命令保存在用户的家目录中的.bash_history文件中。有一点需要你知道的是,只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中。 与命令历史有关的有一个有意思的字符那就是”!”了。常用的有这么几个应用:(1)!! (连续两个”!”),表示执行上一条指令;(2)!n(这里的n是数字),表示执行命令历史中第n条指令,例如”!100”表示执行命令历史中第100个命令;(3)!字符串(字符串大于等于1),例如!ta,表示执行命令历史中最近一次以ta为开头的指令。

linux Shell(脚本)编程入门 实例讲解详解

linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。 下面,让我们一起来看看shell是如何工作的: 建立一个脚本 Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行shell编程,因为bash是免费的并且很容易使用。所以在本文中笔者所提供的脚本都是使用bash(但是在大多数情况下,这些脚本同样可以在bash 的大姐,bourne shell中运行)。 如同其他语言一样,通过我们使用任意一种文字编辑器,比如nedit、kedit、emacs、vi等来编写我们的shell程序。程序必须以下面的行开始(必须方在文件的第一行): 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。当编辑好脚本时,如果要执行该脚本,还必须使其可执行。 要使脚本可执行: 然后,您可以通过输入: ./filename 来执行您的脚本。 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 变量 在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:

Shell编程基础.pdf

为什么要进行shell编程 Linux系统中虽然有各种各样的图形界面工具,但shell仍然是一个非常灵活的工具。Shell不仅集合了大量命令,还是一门非常棒的编程语言。借助shell,大量任务能实现自动化;shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。 下面,让我们一起来看看shell是如何工作的: 建立一个脚本 Linux中有许多种不同的shell,通常我们使用bash (bourne again shell) 进行shell编程因为bash不仅免费(自由)且易于使用。本文提供的脚本都用bash(当然大多数情况下,这些脚本同样可以在bash的前辈, bourne shell中运行)执行。 如同其他语言一样,我们可以使用任意一种文字编辑器,比如nedit、kedit、emacs、vi 等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行): 代码: #!/bin/bash 符号#!用来告诉系统执行该脚本的程序,本例使用/bin/sh。编辑完了,如果要执行该脚本,还必须使其可执行: 代码: chmod +x filename 这样输入 ./filename 便可执行该脚本。 注释 shell脚本中以# 开始的行表示注释,直到一行的结束。我们真诚的建议你在脚本中使用注释,这样即便在相当长时间内没有使用该脚本,你也能在短时间内明白该脚本的作用和工作原理;此外还有很重要的原因——有了注释,更利于和别人分享你的脚本。 变量 在其它编程语言中,你必须使用变量。shell编程中,所有变量都由字符串组成,并且不需要声明。要给一个变量赋值,你可以这么写: 代码: 变量名=值

Linux 脚本编写基础

Linux 脚本编写基础 1.Linux脚本编写基础 1.1语法基本介绍 1.1.1开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 当编辑好脚本时,如果要执行该脚本,还必须使其可执行。 要使脚本可执行: 编译chmod+x filename这样才能用./filename来运行 1.1.2注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。 如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用 及工作原理。 1.1.3变量 在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量

进行声明。要赋值给一个变量,您可以这样写: #!/bin/sh #对变量赋值: a="hello world" #现在打印变量a的内容: echo"A is:" echo$a 有时候变量名很容易与其他文字混淆,比如: num=2 echo"this is the$numnd" 这并不会打印出"this is the 2nd",而仅仅打印"this is the",因为 shell会去搜索变量numnd的值, 但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量: num=2 echo"this is the${num}nd" 这将打印:this is the 2nd 1.1.4环境变量 由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录 脚本中使用环境变量。 1.1.5 Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix命令:

Shell编程基础教程

1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须放在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 当编辑好脚本时,如果要执行该脚本,还必须使其可执行。要使脚本可执行: chmod +x filename 这样才能用./filename 来运行 1.1.2 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 1.1.3 变量 在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写: #!/bin/sh #对变量赋值: a="hello world" # 现在打印变量a的内容: echo "A is:" echo $a 有时候变量名很容易与其他文字混淆,比如: num=2 echo "this is the $numnd" 这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量: num=2 echo "this is the ${num}nd"

这将打印: this is the 2nd 1.1.4 环境变量 由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。 1.1.5 Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: s虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。 常用命令语法及功能: echo "some text": 将文字内容打印在屏幕上 ls: 文件列表 wc –l filewc -w filewc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数 cp sourcefile destfile: 文件拷贝 mv oldname newname : 重命名文件或移动文件 rm file: 删除文件 grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令 cat file.txt: 输出文件内容到标准输出设备(屏幕)上 file somefile: 得到文件类型 read var: 提示用户输入,并将输入赋值给变量 sort file.txt: 对file.txt文件中的行进行排序 uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3 find: 搜索文件比如:根据文件名搜索find . -name filename -print tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux

Linux编写shell脚本if for while

上部: 面向过程: 顺序执行 选择执行: if, case 循环执行: for, while, until 一、for语句 格式: for 变量 in 列表;do 语句1; 语句2; ... done 例1、写一个脚本,添加10个用户,并让每个用户的密码同用户名】 复制代码代码如下: #!/bin/bash for I in {1..10}; do useradd user$I; echo user$I | passwd --stdin user$I done 例2、写一个脚本,分别显示 /tmp/1.dir /tmp/2.dir /tmp/3.dir三个文件的时间戳,并将这三个文件被修改的时间改为201003030303.03 复制代码代码如下: #!/bin/bash for Dir in /tmp/1.dir /tmp/2.dir /tmp/3.dir; do stat $Dir touch -m -t 201003030303.03 $Dir stat $Dir done bash的变量类型: 本地变量 局部变量 环境变量

位置变量:$1、$2、$3、$4.... 特殊变量: $?: 用于保存刚刚执行的命令的状态返回值; 0:成功执行;1-255:失败,1,2,127 可以使用exit命令在脚本中自定义脚本执行状态返回值;如果不定义,脚本执行状态返 回值取决于脚本执行结束前最后执行的那个语句的状态; $@, $*: 所有位置参数; $#: 位置参数的个数; $0: 脚本名称 二、if语句 1、单分支if语句: 格式: if 条件; then 语句1 语句2 ... fi 例3、写一个脚本,实现如下功能:如果用户存在,就说明其存在; 复制代码代码如下: #!/bin/bash UserName=user1 if grep "^$UserName\>" /etc/passwd &> /dev/null; then echo "$UserName exists." fi 例4、写一个脚本,实现如下功能:如果设备/dev/sda3已经挂载,就显示其挂载点; 复制代码代码如下: #!/bin/bash Device='/dev/sda3' if mount | grep "^$Device" &> /dev/null; then mount | grep "/dev/sda3" | cut -d' ' -f3 fi 例5、写一个脚本,实现如下功能:如果/etc/rc.d/rc.sysinit中有空白行,就显示其空白行数;

实验五、Shell脚本程序编制实验

实验五Shell脚本程序编制实验 ●编写一个Shell命令脚本程序的基本步骤如下: ●(1)编辑包含用户命令脚本程序的文本文件 ●(2)添加Shell定义语句,使Linux操作系统可以知道用户使用哪一种Shell ●(3)编写Shell命令脚本程序内容 ●(4)保存脚本程序并退出。用“chmod +x ”命令改变该脚本程序的存取权限和执行 权限,使其可以被适当的用户使用。 ●(5)运用该命令脚本程序以进行测试 ●(6)如有必要,可进行程序纠错。 ●(7)如有必要,可把完整的命令脚本程序移动到相应位置 ●(8)如有必要,可在path语句中加上此脚本的路径 练习:编写书本P107welcome Shell脚本程序 运行脚本程序的三种方法: a.bash 脚本文件名 b.bash < 脚本文件名 c.chmod u(或g,o,a)+x 脚本文件名#为脚本添加执行权限 Shell定义的环境变量shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,这些变量用户还可以重新定义,常用的shell环境变量有: ●HOME:用于保存注册目录的完全路径名。 ●PATH:用于保存用冒号分隔的目录路径名,shell将按PATH变量中给出的顺序搜 索这些目录,找到的第一个与命令名称一致的可执行文件将被执行。 ●TERM:终端的类型。 ●UID:当前用户的标识符,取值是由数字构成的字符串。 ●PWD:当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化。 ●PS1:主提示符,在特权用户下,缺省的主提示符是“#”,在普通用户下,缺省的 主提示符是“$”。 ●PS2:在shell接收用户输入命令的过程中,如果用户在输入行的末尾输入“\”然后 回车,或者当用户按回车键时shell判断出用户输入的命令没有结束时,显示这 个辅助提示符,提示用户继续输入命令的其余部分,缺省的辅助提示符是“>”。练习:使用echo显示上述环境变量内容 注意:PS1 提示符设定标记: ●\d 日期 ●\H 完整主机名\h 主机名第一段 ●\t 24小时时间\T 12小时时间 ●\u 用户名 ●\V Bash版本信息 ●\w 完整的工作路径\W 最后一层目录名 ●\# 下达的第几个命令 ●\\$ 提示符(root $,普通用户#) 练习:输入以下命令,思考设置PS1环境变量的作用 PS1=?\u-\w(\#)\\$? PS1=[\u@\h \W]\\$

linux编写systemd下服务脚本

linux编写systemd下服务脚本 Red Hat Enterprise Linux 7(RHEL 7)已经将服务管理工具从SysVinit和Upstart迁移到了systemd上,相应的服务脚本也需要改变。前面的版本里,所有的启动脚本都是放在/etc/rc.d/init.d/ 目录下。这些脚本都是bash脚本,可以让系统管理员控制这些服务的状态,通常,这些脚本中包含了start,stop,restart这些方法,以提供系统自动调用这些方法。但是在RHEL 7中当中已经完全摒弃了这种方法,而采用了一种叫unit的配置文件来管理服务。 1.Systemd下的unit文件 Unit文件专门用于systemd下控制资源,这些资源包括服务(service)、套接字(socket)、设备(device)、挂载点(mount point)、自动挂载点(automount point)、交换文件或分区(a swap file or partition)… 所有的unit文件都应该配置[Unit]或者[Install]段.由于通用的信息在[Unit]和[Install]中描述,每一个unit应该有一个指定类型段,例如[Service]来对应后台服务类型unit. 1.1.unit 类型如下: service :守护进程的启动、停止、重启和重载是此类unit 中最为明显的几个类型。 socket :此类unit 封装系统和互联网中的一个socket。当下,systemd支持流式, 数据报和连续包的AF\_INET,AF\_INET6,AF\_UNIXsocket 。也支持传统的FIFOs 传输模式。每一个socket unit 都有一个相应的服务unit 。相应的服务在第一个“连接”进入socket 或FIFO 时就会启动(例如:nscd.socket 在有新连接后便启动nscd.service)。 device :此类unit 封装一个存在于Linux设备树中的设备。每一个使用udev 规则标记的设备都将会在systemd 中作为一个设备unit 出现。udev 的属性设置可以作为配置设备unit 依赖关系的配置源。 mount :此类unit 封装系统结构层次中的一个挂载点。 automount :此类unit 封装系统结构层次中的一个自挂载点。每一个自挂载unit 对应一个已挂载的挂载unit (需要在自挂载目录可以存取的情况下尽早挂载)。 target :此类unit 为其他unit 进行逻辑分组。它们本身实际上并不做什么,只是引用其他unit 而已。这样便可以对unit 做一个统一的控制。(例如:multi-user.target 相当于

Linux系统编程实验二:gcc、gdb的使用以及Makefile文件的编写

实验二:gcc、gdb、Makefile的使用 ●实验目的: (一)学会使用gcc编译器 (二)学会gdb调试器的使用 (三)学会编写Makefile ●实验要求: (一)编写一应用程序,使用gcc进行编译,并分别使用-o,-g,-static,-O2等选项(二)编写一应用程序,使用gdb调试,调试中使用到该小节所介绍的所有命令 (三)实现一应用程序,该程序有两个c文件构成,使用makefile来完成对该程序的编译●实验器材: 软件:安装了Linux的vmware虚拟机 硬件:PC机一台 ●实验步骤: (一)gcc编译器 1、先用vi编辑hello.c文件,内容如下: 2、gcc指令的一般格式为:gcc [选项] 要编译的文件 [选项] [目标文件] 例:使用gcc编译命令,编译hello.c生成可执行文件hello,并运行hello 上面的命令一步由.c文件生成了可执行文件,将gcc的四个编译流程:预处理、编译、汇编、连接一步完成,下面将介绍四个流程分别做了什么工作 3、-E选项的作用:只进行预处理,不做其他处理。 例:只对hello.c文件进行预处理,生成文件hello.i,并查看 通过查看可以看到头文件包含部分代码#include 经过预处理阶段之后,编译器已将stdio.h的内容贴了进来。 4、-S选项的使用 -S选项的作用:只是编译不汇编,生成汇编代码 例:将hello.i文件只进行编译而不进行汇编,生成汇编代码hello.s 5、-c选项的使用

-c选项的作用:只是编译不连接,生成目标文件.o 例:将汇编代码hello.s只编译不链接成hello.o文件 6、将编译好的hello.o链接库,生成可执行文件hello 7、-static选项的使用 -static选项的作用:链接静态库 例:比较hello.c连接动态库生成的可执行文件hello和链接静态库生成的可执行文件hello1的大小 可以看到静态链接库的可执行文件hello1比动态链接库的可执行文件hello要大的多,他们的执行效果是一样的 8、-g选项的使用 -g选项的作用:在可执行程序中包含标准调试信息 例:将hello.c编译成包含标准调试信息的可执行文件hello2 带有标准调试信息的可执行文件可以使用gdb调试器进行调试,以便找出逻辑错误 9、-O2选项的使用 -O2选项的作用:完成程序的优化工作 例:将hello.c用O2优化选项编译成可执行文件hello3,和正常编译产生的可执行文件hello进行比较

几个好玩的shell脚本编程实验

几个好玩的shell脚本 班级:09自动化姓名:刘振威学号:1112120102 一、实验目的 1.掌握Shell编程的基本方法 2.了解Shell脚本的基础知识 3.学习编写Shell脚本编程 二、实验要求 1.完成一个简单Shell程序的编写和执行过程; 2.设计一个Shell程序,显示欢迎界面; 3.尝试编写一些好玩的Shell 脚本。 三、实验准备 Shell是一个命令语言解释器,它拥有自己内建的Shell命令集,Shell也能被系统中其他应用程序调用。用户在提示符下输入的命令都由Shell解释后传给Linux核心。 Shell的另一个重要特性是它自身就是一个解释型的程序设计语言。Shell 程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。Shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个执行的Shell程序中。 Shell脚本的建立和执行 Shell程序可以存放在文件中,这种被Shell解释执行的命令文件称为Shell脚本(Shellscript),也称做Shell文件或者Shell 过程。Shell脚本可以包含任意从键盘输入的UNIX命令。 1)Shell脚本的建立 建立Shell脚本的方法同建立普通文本文件的方法相同,利用编辑器(如vi)进行程序录入和编辑加工。例如,要建立一个名为ex1的Shell的脚本,可以在提示符后打入命令: $ vi ex1 2)执行Shell脚本的方式执行Shell脚本的方式基本上有三种: (1)输入定向到Shell

这种方式是用输入重定向方式让Shell从给定文件中读入命令行并进行相应处理。其一般形式是:$ sh < 脚本名例如, $ sh < ex1 (2)以脚本名作为Shell参数。其一般形式是: $ sh 脚本名 [参数] 例如, $ sh ex2 /usr/mengqc/usr/liuzhy (3)将Shell脚本改为有执行权限的文件,由正文编辑器(如vi)建立的Shell脚本,用户通常是不能直接执行的,需要利用命令chmod将它改为有执行权限。例如: $ chmod +x ex2 四、实验步骤 1.完成一个简单Shell程序的编写和执行过程; 该实例会显示当前的日期时间、执行路径、用户账号及所在的目录位置。 在文本编辑器中输入下列内容,并存为showinfo: #!/bin/bash #This script is a test! echo –n "Date and time is: " date echo –n "The Executable path is : "$PATH echo "Your name is : `whoami` " echo –n "Your Current directory is : " pwd #end 使用tcsh执行上面的Shell脚本: tcsh showinfo 2.设计一个Shell程序,显示欢迎界面。 #!/bin/bash #filename:Welcome first() {

linux脚本编写

Linux脚本编写 2、awk命令使用 a.awk是一种可以处理数据、产生格式化报表的语言,功能十分强大。 b.awk的工作方式可以通过正则表达式读取数据,将每一行数据视为一条记录(record)每笔记录以字段分隔符(默认)分成若干字段,然后输出各个字段的值。 c.命令形式:awk “pattern {operate}” file,其中pattern省略时,匹配所有字符;{operate}省略时,默认使用{print}。{print $2}表示输出第二个字段。 d.awk –F “:”“pattern {operate}” file表示以“:”分隔。 e.待完善 3、grep 常用命令 –v 反转查找(即忽略)

-a 不要忽略二进制数据。 -A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。 -B在显示符合范本样式的那一行之外,并显示该行之前的内容。 -c 计算符合范本样式的列数。 -C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。 4、vim常用命令 H 光标移动到这个屏幕的最上方那一行的第一个字符 M 光标移动到这个屏幕的中央那一行的第一个字符 L 光标移动到这个屏幕的最下方那一行的第一个字符 G 移动到这个档案的最后一行(常用) nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个 档案的第 20 行(可配合 :set nu) [Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) [Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) 0 或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用) $ 或功能键[End] 移动到这一行的最后面字符处(常用)

linux shell编写系统服务脚本

事先准备工作:源码安装apache 。安装目录为/usr/local/httpd 任务需求: 1、可通过service httpdstart|stop|status|restart命令对服务进行控制 2、httpd服务可开机自启动 思路: 1、start、stop操作可直接调用源码安装的httpd的控制程序apachectl 2、在启动服务时,建立httpd.lock文件;停止服务时删除 3、status操作检测httpd.lock文件是否存在,存在判断服务已启动,不存在表示服务停止 4、对每个操作建立对应的函数,进行调用 5、restart操作先调用stop函数,在调用start函数 6、服务脚本的控制参数通过位置变量$1 传入,使用case分支进行识别、执行相应的操作 7、在脚本开头添加chkconfig管理参数,定义哪个运行级别启动、服务启动优先级、服务关闭优先级(让服务开机自启动,必须添加),description服务描述,进程名 PS:看过系统已有系统服务脚本,发现那些比我写的复杂多了。原谅我刚学shell,第一次写系统服务脚本

脚本如下: #vim /etc/init.d/httpd #!bin/bash #chkconfig:2345 55 25 //运行级别、启动优先级、关闭优先级 #processname:httpd //进程名 #description:sourcehttpd server daemon //服务描述 prog=/usr/local/httpd/bin/apachectl //控制程序路径 lock=/usr/local/httpd/httpd.lock //lock文件路径 start(){ //start函数 $prog start echo "正在启动服务...." touch $lock } stop(){ //stop函数 $prog stop echo "正在停止服务...." rm -rf $lock } status(){ //status函数 if [ -e $lock ];then echo "$0 服务正在运行" else echo "$0 服务已经停止" fi } restart(){ //restart函数 stop start //直接调用stop、start函数, } case "$1" in //case分支结构匹配,$1位置参数对控制参数调用"start") start //调用start函数 ;; "stop") //调用stop函数 stop ;; "status") //调用status函数 status

相关文档