Linux学习之Shell编程

在Linux中经常用到Shell脚本,简单学习下Shell编程吧。

Shell 编程

变量

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。
使用一个定义过的变量,只要在变量名前面加美元符号即可。

#!/bin/bash
your_name="Lee"
echo $your_name
echo ${your_name}  
#变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界

Shell 字符串

#!/bin/bash
str="abcdefg"
#获取字符串长度
echo ${#str}  #7
#提取子字符串 从字符串第 2 个字符开始截取 4 个字符
echo ${str:1:4}  #bcde
#查找子字符串 查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)
str="hello world."
echo `expr index "$str" io` #5

 

传递参数

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$nn 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

执行

$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3

 

 

条件判断

布尔运算

运算符描述示例
! 非关系,条件结果取反 [ ! 1 -eq 2 ]为true
-a 与关系,在[]表达式中使用 [ 1 -eq 1 -a 2 -eq 2 ]为true
-o 或关系,在[]表达式中使用 [ 1 -eq 1 -o 2 -eq 1 ]为true

 

 

逻辑运算

运算符描述示例
&& 逻辑与,在[[]]和(())表达式中时使用 [[ 1 -eq 1 && 2 -eq 2 ]]为 true; (( 1 == 1 && 2 == 2 ))为true;[ 1 -eq 1 ] && echo yes 如果&&前 面表达式为 true 则执行后面的
|| 逻辑或,在[[]]和(())表达式中时使用 [[ 1 -eq 1 || 2 -eq 1 ]]为 true;(( 1 == 1 || 2 == 2 ))为true;[ 1 -eq 2 ]  ||  echo yes  如果 || 前面表达式为 false 则执行后面的

 

if条件

#!/bin/bash
if [ $1 -ge 60 ]
then 
  echo "及格了"
elif [ $1 -lt 60 ]
then 
  echo "不及格"
fi

if [ "ok"="ok" ]
then
  echo "equal"
fi

if [ 23 -ge 22 ]
then
  echo "ok"
fi

P1="/home/apple/shellCode/position.sh"
if [ -f $P1 ]
then
  echo "$P1 存在"
fi

if [ -x $P1 ]
then
  echo "$P1 有执行的权限"
fi

 

case

#!/bin/bash

case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
"3")
echo "周三"
;;
*)
echo "other.."
;;
esac

 

for 循环

#!/bin/bash
for i in "$*"
do
  echo "num is $i"
done

echo "---------------"

for j in "$@"
do
  echo "num is $j"
done
#!/bin/bash
SUM=0
#for (( i=1; i <= 100; ++i ))
for (( i=1; i <= $1; ++i ))
do
  SUM=$[$SUM + $i]
done
echo "$SUM"

 

while循环

#!/bin/bash

SUM=0
i=1
while [ $i -le $1 ]
do
  SUM=$[ $SUM + $i ]
  i=$[$i + 1]
done
echo "SUM=$SUM"

 

自定义函数

#!/bin/bash

#定义函数
function getSum(){
    SUM=$[$n1+$n2]
    echo "SUM=$SUM"
}

#输入两个数
read -p "please input a number n1=" n1
read -p "please input a number n2=" n2
#调用自定义函数
getSum $n1 $n2

 

例子:(备份mysql数据库)

vim /usr/sbin/myshell/mysql_db_backup.sh

#!/bin/bash
#备份目录
BACKUP="/data/backup/db"
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME
echo "${DATETIME}.sql.gz"
#数据库地址
HOST=localhost
#数据库用户名和密码
DB_USER=root
DB_PW=123456
#备份的数据库名
DB_NAME=hello01

#创建备份目录,若不存在,就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"

#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DB_NAME} | gzip > "${BACKUP}/${DATETIME}/$DATETIME.sql.gz"
#将文件夹处理成 tar.gz
cd ${BACKUP} 
tar -czvf ${DATETIME}.tar.gz ${DATETIME}

#删除对应的目录
rm -rf ${BACKUP}/${DATETIME}

#删除10天前的备份文件
find ${BACKUP} -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;

echo "备份数据库$DB_NAME 成功"

然后用 cron 定时调度 执行该shell脚本

crontab -e

进入编辑,每天02:30执行该shell脚本

30 2 * * * /usr/sbin/myshell/mysql_db_backup.sh

用 crontab -l  可以查看

 

posted @ 2022-10-11 15:55  htj10  阅读(25)  评论(0编辑  收藏  举报
TOP