备注:一些与传递给shell的参数相关的变量:
$# 命令行参数的个数
$? 调用命令的返回值
$$ 当前进程的进程号
$! 最后一个后台命令的进程号
$0 命令行的第一个参数,也就是命令名
$n 命令行的第n个参数,若是要取超过9个参数${n}
$* 全部的命令行参数,等于("$1 $2..."
"$@" 全部的命令行参数,等于("$1" "$2"...)
$_ 前一个命令的最后一个命令行参数mysql
1. 写一个脚本,利用循环计算10的阶乘sql
#!/bin/bashshell
#factorialteset数据库
factorial=1小程序
#for a in `seq 1 10`bash
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,是求表达式变量的值。
二、写一个脚本,执行后,打印一行提示“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这样的话提示在第一行,第二行上是输入的数。
三、写一个脚本,利用循环和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
四、一个函数,利用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表示移位
五、写一个脚本,能够根据参数文件名,以正确的参数调用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.后剩下的部分。
六、写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,好比文件名,包名,所有等。而后提示用户选择查询信息,好比包名,包里所包含的全部文件,包的信息等。而后询问是否继续查询,是则循环刚才的过程,不然退出。
七、MySQL:Linux下自动备份数据库的shell脚本 Linux 服务器上的程序天天都在更新 MySQL 数据库,因而就想起写一个 shell 脚本,结合 crontab,定时备份数据库。其实很是简单,主要就是使用 MySQL 自带的 mysqldump 命令。
脚本内容以下:#!/bin/sh# File: /home/mysql/backup.sh# Database infoDB_NAME="test"DB_USER="username"DB_PASS="password"# Others varsBIN_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 数据库了。