备注:一些与传递给shell的参数相关的变量:
$# 命令行参数的个数
$? 调用命令的返回值
$$ 当前进程的进程号
$! 最后一个后台命令的进程号
$0 命令行的第一个参数,也就是命令名
$n 命令行的第n个参数,如果要取超过9个参数${n}
$* 所有的命令行参数,等于("$1 $2..."
"$@" 所有的命令行参数,等于("$1" "$2"...)
$_ 前一个命令的最后一个命令行参数

 

1.     写一个脚本,利用循环计算10的阶乘

#!/bin/bash

#factorialteset

factorial=1

#for a in `seq 1 10`

for a in 1 2 3 4 5 6 7 8 9 10

do

factorial=`expr $factorial \* $a`

done

echo “10! = $factorial”

上面的小程序能够实现求10!,但是有以下几点需要注意:

1)     for循环的实现方式,以上两种都可以,一种是直接写for a in 1 2 34 5 6 7 8 9 10,并且这几个数字不需要加任何引号。另一种for a in `seq 1 10`,这里用反单引号引起来,反单引号表示执行里面的这句话,注意不能用单引号,更不能用双引号。

2)     factorial=1在初始化的时候,这个等号左右不能有任何空格。一定要注意。

3)     factorial=`expr $factorial \* $a`,这句话要注意,也要用反单引号引起来。并且,乘号*前要用反斜杠进行转义。其中expr命令的用法是expr Expression,是求表达式变量的值。

2、写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值。直到用户输入"end"停止。

#! /bin/bash

#inputtest

var=null

while [ var != “end” ]

do

echo –n “inputa integer:”

read var

if [ $var = “END”]

then

break

fi

echo “var is$var”

done

以上程序,需要注意的是:

1)if [ $var = “END”]这句话,必要的空格一定要有,另外,是=而不是==

2)var=null这句话,仍然注意,变量赋值,等号左右不能有空格

3)echo –n “inputa integer:”这句话中-n表示回车不换行, 这样写是为了好看,输入和提示在一行上,当然也可以不用-n这样的话提示在第一行,第二行上是输入的数。

3、写一个脚本,利用循环和continue关键字,计算100以内能被3整除的数之和。

#!/bin/bash

#sumtest

sum=0

fora in `seq 1 100`

do

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

    continue

fi

sum=`expr $sum + $a`

done

echo“the sum is $sum”

这个脚本在写的时候实在是调试了很多遍啊。

1)一不小心就错了。特别是什么时候加空格,什么时候不加空格

给变量赋值的时候一定不能有空格,比如sum=0,这个地方,另外,这里不要写成sum=null

2)在进行两个数的运算的时候,不能直接写成sum=$sum+$a而要写成sum=`expr $sum + $a`

3)也就是说,赋值语句的等号左右不能有空格。算数运算符左右一定要有空格,并且用expr再赋值给一个变量。

4)整数比较的时候不能用=和!= 而要用 –eq  和-ne

 

 

4、一个函数,利用shift计算所有参数乘积,假设参数均为整数( 特殊变量$# 表示包含参数的个数)

#! /bin/bash

#shifttest

result=1

while [ $# -gt 0 ]

do

result=`expr $1\* $result`

shift

done

echo “the result is $result”

其中:$1代表的是第一个参数,$#代表的是参数的格式,$# -gt 0代表的是参数的个数大于0.

shift表示移位

 

5、写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。

#!/bin/bash

#casetest

case${1##*.tar} in

gz)

    tar jxvf $1

    ;;

bz2)

    tar zxvf $1

    ;;

*)

    echo “errorfile”

esac

 

备注:

$1表示运行该脚本的第一个命令行参数

${1##*.tar}代表去掉第一个参数命令行参数的*.tar后剩下的部分。

比如,运行脚本时用./mytar.shbak.tar.gz,那么$1就是指的bak.tar.gz,${1##*.tar.}就是gz

同理,${3##*.tar.}表示第三个命令行参数去掉*.tar.后剩下的部分。

6、写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,比如文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,包的信息等。然后询问是否继续查询,是则循环刚才的过程,否则退出。

 

 

7、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"
DATE=`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 数据库了。

shell脚本实例的更多相关文章

  1. 分享7个shell脚本实例--shell脚本练习必备

    概述 看多shell脚本实例自然就会有shell脚本的编写思路了,所以我一般比较推荐看脚本实例来练习shell脚本.下面分享几个shell脚本实例. 1.监测Nginx访问日志502情况,并做相应动作 ...

  2. shell脚本实例,通向shell脚本大师的必经之路

    概述 读书百遍其义自见,shell脚本也是,只要例子看得多了,自然就知道怎么写了.这里主要整理了20几个例子,因为内容比较多,所以分了几次来做介绍了.下面的实例最好先自己思考怎么去实现,然后再看下实现 ...

  3. shell脚本实例-系统监控

    shell脚本监控网站并实现邮件.短信报警shell进程监控脚本(发送邮件报警)Shell脚本监控服务器在线状态和邮件报警的方法 http://www.jbxue.com/jb/shell/ 11. ...

  4. shell脚本实例一,移动文件夹中大于2000B的文件到另一个文件夹

    shell脚本能帮我们简化linux下的一些工作,现在有个需求,把TMPA文件夹下大于2000B的文件都移动到TMPB下 #! /bin/bash function movefiles() { ` d ...

  5. shell脚本实例一

    一. 什么是shell 脚本时一种解释性语言: shell脚本保存执行动作: 脚本判定命令的执行条件 脚本来实现动作的批量执行.二.如何创建 vim  test.sh     ##shell脚本一般都 ...

  6. shell脚本实例-mysql多机部署

    今天我给大家分享shell 安装mysql 多机部署的实例,本次实验是基于各个主机的公钥已经配置好了,如果还不会推送公钥的同学,可以看看我以前写的文章,那里面有写推公钥的实例,mysql 多机部署一般 ...

  7. shell脚本实例-菜单样例

    1.9.1 实例需求 用户在进行Linux系统管理的过程中,经常需要用到查看进程的信息.用户的信息等常用的功能.本例针对这一需求,使用shell编程实现基本的系统管理 功能.通过本程序,可以按照要求实 ...

  8. shell脚本实例(2)

    1.传给脚本一个参数:目录,输出该目录中文件最大的,文件名和文件大小 #!/bin/bash if [ $# -ne 1 -o ! -d $1 ];then echo "Args is er ...

  9. 【shell脚本实例】一个恶作剧—— kill掉占用CPU较高的matlab进程

    我们实验室有台服务器,博士们在服务器上跑MATLAB,基本都是4核都是超过95%的CPU占用,想了个恶作剧的shell 定时kill掉MATLAB程序,是不是很邪恶啊,哈哈~~~  不过我只是干过一次 ...

随机推荐

  1. 20160729noip模拟赛zld

    首先显然有多少个奇数,就有多少个回文串是最优的(没有奇数时构造一个回文串 然后有了k个“核心”,把剩下的字符顺序安排到这些的两侧,最后最短的回文串长度就是答案 #include<map> ...

  2. C# 中请求数据方式

    #region 根据URL获取结果集        /// <summary>        /// 根据URL获取结果集 默认为GET,如果数据量大了可以传入POST        // ...

  3. C# \uxxx Unicode编码解码

    /// <summary> /// Unicode编码 /// </summary> /// <param name="str"></pa ...

  4. [设计模式] 3 创建者模式 builder

    转载http://blog.csdn.net/wuzhekai1985/article/details/6667467 建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不 ...

  5. java.lang.IllegalArgumentException: Requested window android.os.BinderProxy@450b2f48 异常处理

    晕死的错误,改了半天也没想到是这样的原因,基础正要呀... 先看一下警告信息: 07-07 08:32:19.540: WARN/WindowManager(74): Failed looking u ...

  6. Unity3D Log 收集机制

    最近做项目的时候发现,需要有一个完整的log机制.这样不仅方便调试而且方便观察. 一.需求 目前我认为一个完善的log机制应该是这样的. 一.双击定位 二.生命周期是全局的 三.输出包括consloe ...

  7. .NET中数据集的强类型化

    我们知道,每一种程序设计语言都提供一定的类型检查,类型检查可以在编译时进行,也可以在运行时进行,分别称做静态类型检查和动态类型检查.由于静态类型的检查是在编译时进行,实现比较容易,能提高程序的运行效率 ...

  8. ssh 公钥

    以前做ssh key登录方式时都是用的root帐号,基本都是无往不利的,权限采用默认即可.今天实验中两台机器帐号都是nianzong,一个普通的帐号.按照如下步骤: A机器:ssh-keygen -t ...

  9. Ubuntu 14.04 + Linux 3.14.34 系统调用实现文件拷贝

    采用 64位系统, ubuntu 14.04 + 新内核linux-3.14.34 下载地址https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.1 ...

  10. 360抢票 网站维护中 && 你的登录被踢了!

    本来在超市犹豫到底该买哪种暖手袋,犹豫了差不多半个多小时,还没决定好,一看时间还有8分钟到10点,遂狂奔回寝室抢票. 结果,360抢票被12306秒了—— 猜测原因是12306的验证码改了(变成动态的 ...