shell编程学习笔记之一--学习第二天

我不是女神ヾ 2023-06-15 07:21 175阅读 0赞

文章目录

  • 一、说明:
    • 1、整理一些linux命令必须熟练掌握常的命令(复习+扩展学习Linux命令)
    • 2、Linux下vim/vi 编辑器 命令总结
    • 3、学习课件:
    • 4、之前的博客:
      • ①、shell编程学习笔记之一—学习第一天
  • 二、实战演练:
    • 1、MySQL数据库的自动备份
    • 2、crontab 定时任务:
      • 2.1. 命令格式
      • 2.2. 命令参数
      • 2.3. crontab的文件格式
      • 2.4. 常用方法:
        • 1)、列出crontab文件
        • 2)、编辑crontab文件
        • 3)、删除crontab文件:
      • 2.5. 使用实例:
        • 实例1:每1分钟执行一次myCommand
        • 实例2:每小时的第3和第15分钟执行
        • 实例3:在上午8点到11点的第3和第15分钟执行
        • 实例4:每隔两天的上午8点到11点的第3和第15分钟执行
        • 实例5:每周一上午8点到11点的第3和第15分钟执行
        • 实例6:每晚的21:30重启smb
        • 实例7:每月1、10、22日的4 : 45重启smb
        • 实例8:每周六、周日的1 : 10重启smb
        • 实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
        • 实例10:每星期六的晚上11 : 00 pm重启smb
        • 实例11:每一小时重启smb
        • 实例12:晚上11点到早上7点之间,每隔一小时重启smb
    • 3、每隔2分钟把当前日期写入当前的time.txt文件中
      • 1、创建backup_time.sh文件
      • 2、测试shell脚本代码逻辑是否正确
      • 3、编辑crontab文件:
    • 4、LAMP 架构的整合和服务启动
    • 5、for循环:
      • 示例1—打印出15以内的数:
      • 示例2—求100以内的和:

一、说明:

打算从B站学习一下shell编程,从很多的课程视频中,挑选了一个:
B站视频地址:
打算开始学习着做着笔记:
这个需要一些Linux基础,还有vim的,如果不太熟练,可以看下我之前的整理的俩个博客:

1、整理一些linux命令必须熟练掌握常的命令(复习+扩展学习Linux命令)

整理一些linux命令必须熟练掌握常的命令(复习+扩展学习Linux命令)

2、Linux下vim/vi 编辑器 命令总结

Linux下vim/vi 编辑器 命令总结

3、学习课件:

这个地址我直接把B站中评论下方分享的弄出来了,如果失效,可以下方评论,我把我下载的分享给你。
下载地址

4、之前的博客:

①、shell编程学习笔记之一–学习第一天

shell编程学习笔记之一–学习第一天

二、实战演练:

1、MySQL数据库的自动备份

  1. vim backup_mysql.sh

敲入代码(建议自己敲,还可以熟练一下vim操作,非常熟练vim的可以直接复制测试):

这个代码我还没有成功测试,因为公司没有MySQL,所以先跟着视频,敲出来,回家用家里的Ubuntu安装个MySQL测试。

  1. #!/bin/bash
  2. #auto backup mysql db## 标题
  3. #by authors zhaojiafu 2019
  4. #define backup path
  5. BAK_DIR=/data/backup/`date +%Y%m%d`
  6. MYSQLDB=discuz
  7. MYSQLUSER=backup
  8. MYSQLPW=123456
  9. MYSQLCMD=/usr/bin/mysqldump
  10. if [ $UID -ne 0 ];then
  11. echo "Must to be use root for exec shell."
  12. exit
  13. fi
  14. if [ ! -d $BAK_DIR ];then
  15. mkdir -p $BAK_DIR
  16. echo -e "\033[32mThe $BAK_DIR Create Successfully!\033[0m"
  17. else
  18. echo "This $BAK_DIR is exists..."
  19. fi
  20. #Mysql BACKUP COMMAND
  21. $MYSQLCMD -u $MYSQLUSER -p $MYSQLPW -d $MYSQLDB > $BAK_DIR/$MYSQLDB.sql
  22. if [ $? -eq 0 ];then
  23. echo -e "033[32mThe Mysql Backup $MYSQLDB Succcessfully!\033[0m"
  24. else
  25. echo -e "033[32mThe Mysql Backup $MYSQLDB Failed,Please check.\033[0m"
  26. fi

2、crontab 定时任务:

这个我也不太会,正好看到了,学习一下吧,说不定日后用到定时。
参考学习文档:crontab 定时任务

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。

2.1. 命令格式

  1. crontab [-u user] file crontab [-u user] [ -e | -l | -r ]

2.2. 命令参数

-u user:用来设定某个用户的crontab服务; file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。

2.3. crontab的文件格式

  1. 星期 要运行的命令

注意:前面5个域用空格分隔

第1列分钟0~59
第2列小时0~23(0表示子夜)
第3列日1~31
第4列月1~12
第5列星期0~7(0和7表示星期天)
第6列要运行的命令

2.4. 常用方法:

1)、列出crontab文件

列出crontab文件:

  1. crontab -l

可用来增加备份($HOME/mycron是你需要备份的一个目录就行):

  1. crontab -l > $HOME/mycron

2)、编辑crontab文件

  1. crontab -e

可以像使用vi编辑其他任何文件那样修改crontab文件并退出。如果修改了某些条目或添加了新的条目,那么在保存该文件时, cron会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值,它会提示你。 我们在编辑crontab文件时,没准会加入新的条目。例如,加入下面的一条:

  1. # DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
  2. 30 3 1,7,14,21,26 * * /bin/find -name 'core' -exec rm { } \;

然后使用刚刚-l的命令。列出crontab文件:

  1. crontab -l

在这里插入图片描述

3)、删除crontab文件:

  1. crontab -r

然后在使用

  1. crontab -l

就会显示没有crontab文件了。

2.5. 使用实例:

实例1:每1分钟执行一次myCommand

  1. * * * * * myCommand

实例2:每小时的第3和第15分钟执行

  1. 3,15 * * * * myCommand

实例3:在上午8点到11点的第3和第15分钟执行

  1. 3,15 8-11 * * * myCommand

实例4:每隔两天的上午8点到11点的第3和第15分钟执行

  1. 3,15 8-11 */2 * * myCommand

实例5:每周一上午8点到11点的第3和第15分钟执行

  1. 3,15 8-11 * * 1 myCommand

实例6:每晚的21:30重启smb

  1. 30 21 * * * /etc/init.d/smb restart

实例7:每月1、10、22日的4 : 45重启smb

  1. 45 4 1,10,22 * * /etc/init.d/smb restart

实例8:每周六、周日的1 : 10重启smb

  1. 10 1 * * 6,0 /etc/init.d/smb restart

实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb

  1. 0,30 18-23 * * * /etc/init.d/smb restart

实例10:每星期六的晚上11 : 00 pm重启smb

  1. 0 23 * * 6 /etc/init.d/smb restart

实例11:每一小时重启smb

  1. * */1 * * * /etc/init.d/smb restart

实例12:晚上11点到早上7点之间,每隔一小时重启smb

  1. 0 23-7 * * * /etc/init.d/smb restart

3、每隔2分钟把当前日期写入当前的time.txt文件中

根据上面的MySQL命令,我先测试一下定时任务和shell脚本的简单结合,因为公司里面没有MySQL,我也没有权限安装MySQL,先用其他的测试这个功能。

1、创建backup_time.sh文件

  1. vim backup_time.sh

敲入代码:

  1. #!/bin/bash
  2. #auto crontab write time
  3. #by authors zhaojiafu 2019
  4. #time1=`date +%Y-%m-%d %H:%M.%S`
  5. time1=`date +%Y-%m-%d`
  6. file=/home/zjf/shell_study/day02/time.txt
  7. echo "Is reading to write $time1 to $file"
  8. echo $time1 >> $file

然后先用sh命令执行一下,测试脚本是否成功,因为后面要用crontab执行,所以sh文件设计的任何目录要写觉得路径。

2、测试shell脚本代码逻辑是否正确

执行shell脚本:

在这里插入图片描述
然后生成一个time.txt 文件
在这里插入图片描述

然后cat查看文件:
在这里插入图片描述

3、编辑crontab文件:

  1. crontab -e
  2. */2 * * * * /bin/bash /home/zjf/shell_study/day02/backup_time.sh

其中后面的*代表所有,*/2,代码每俩分钟。
记得要写绝对路径。

保存退出之后,然后等待一会就可以执行了。

然后我写会博客,等待了几分钟,在看看time.txt文件:
在这里插入图片描述
这个时候说明,定时任务创建成功了。不过好像里面不能写echo打印输出的语句,我写的测试没有出来。

4、LAMP 架构的整合和服务启动

shell脚本代码(还为测试,后续抽时间补充):

  1. #!/bin/bash
  2. #auto intall lamp
  3. #by authors zhaojiafu 2019
  4. #Httpd define path variable
  5. H_FILES=httpd-2.2.27.tar.bz2
  6. H_FILES_DIR=httpd-2.2.27
  7. H_URL=http://mirrors.cnnic.cn/apache/httpd/
  8. H_PREFIX=/usr/local/apache2/
  9. #MySQL define path variable
  10. M_FILES=mysql-5.5.20.tar.gz
  11. M_FILES_DIR=mysql-5.5.20
  12. M_URL=http://down1.chinaunix.net/distfiles/
  13. M_PREFIX=/usr/local/mysql/
  14. #PHP define path variable
  15. P_FILES=php-5.3.28.tar.bz2
  16. P_FILES_DIR=php-5.3.28
  17. P_URL=http://mirrors.sohu.com/php/
  18. P_PREFIX=/usr/local/php5/
  19. #auto Menu Follow
  20. if [ -z "$1" ];then
  21. echo -e "\033[36mPlease Select Install Menu follow:\033[0m"
  22. echo -e "\033[32m1)、编译安装Apache服务器\033[1m"
  23. echo -e "2)、编译安装Mysql服务器"
  24. echo -e "3)、编译安装PHP服务器"
  25. echo -e "4)、配置index.php并启动LAMP服务"
  26. echo -e "\033[31mUsage(用法):{ /bin/bash $0 1|2|3|4|help \033[0m}"
  27. exit
  28. fi
  29. #auto install Apache
  30. if [[ "$1" -eq "1" ]];then
  31. wegt -c $H_URL/$H_FILES &&tar -jxvf $H_FILES &&cd $H_FILES_DIR ;./configure --prefix=$H_PREFIX
  32. if [ $? -eq 0 ];then
  33. make &&make install
  34. echo -e "\033[32mT $H_FILES_DIR Server Install Successfully!\033[0m"
  35. else
  36. echo -e "\033[32mT $H_FILES_DIR Server Install Failed,Please check....\033[0m"
  37. exit
  38. fi
  39. #auto install Mysql
  40. elif [[ "$1" -eq "2" ]];then
  41. wegt -c $M_URL/$M_FILES &&tar -zxvf $M_FILES &&cd $M_FILES_DIR &&yum install cmake -y ;cmake .
  42. -DCMAKE_INSTALL_PREFIX=$M_PREFIX \
  43. -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
  44. -DMYSQL_DATADIR=/data/mysql \
  45. -DSYSCONFDIR=/etc \
  46. -DMYSQL_USER=mysql \
  47. -DMYSQL_TCP_PORT=3306 \
  48. -DWITH_XTRADB_STORAGE_ENGINE=1 \
  49. -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  50. -DWITH_PARTITION_STORAGE_ENGINE=1 \
  51. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  52. -DWITH_MYISAM_STORAGE_ENGINE=1 \
  53. -DWITH_READLINE=1 \
  54. -DENABLED_LOCAL_INFILE=1 \
  55. -DWITH_EXTRA_CHARSETS=1 \
  56. -DDEFAULT_CHARSET=utf8 \
  57. -DDEFAULT_COLLATION=utf8_general_ci \
  58. -DEXTRA_CHARSETS=all \
  59. -DWITH_BIG_TABLES=1 \
  60. -DWITH_DEBUG=0
  61. make && make install
  62. /bin/cp support-files/my-small.cnf /etc/my.conf
  63. /bin/cp support-files/mysql.server /etc/init.d/mysqld
  64. chmod +x /etc/init.d/mysqld
  65. chkconfig --add mysqld
  66. chkconfig mysqld on
  67. if [ $? -eq 0 ];then
  68. make &&make install
  69. echo -e "\033[32mT $M_FILES_DIR Server Install Successfully!\033[0m"
  70. else
  71. echo -e "\033[32mT $M_FILES_DIR Server Install Failed,Please check....\033[0m"
  72. exit
  73. fi
  74. #auto install PHP
  75. elif [[ "$1" -eq "3" ]];then
  76. wegt -c $P_URL/$P_FILES &&tar -jxvf $P_FILES &&cd $P_FILES_DIR ;./configure --prefix=$P_PREFIX --with-config-fil
  77. e-path=$P_PREFIX/etc --with-mysql=$M_PREFIX --with-apxs2=$H_PREFIX/bin/apxs
  78. if [ $? -eq 0 ];then
  79. make ZEND_EXTRA_LIBS='-liconv' &&make install
  80. echo -e "\033[32mT $P_FILES_DIR Server Install Successfully!\033[0m"
  81. else
  82. echo -e "\033[32mT $P_FILES_DIR Server Install Failed,Please check....\033[0m"
  83. exit
  84. fi
  85. # 配置 index.php 并启动 LAMP 服务
  86. elif [[ "$1" -eq "4" ]];then
  87. sed -i '/DirectoryIndex/s/index.html/index.php index.html/g' $H_PREFIX/conf/httpd.conf
  88. $H_PREFIX/bin/apachectl restart
  89. echo "AddType application/x-httpd-php .php" >>$H_PREFIX/conf/httpd.conf
  90. IP=`ifconfig eth1|grep "Bcast"|awk '{print $2}'|cut -d: -f2`
  91. echo "You can access http://$IP/"
  92. # cat >$H_PREFIX/htdocs/index.php <<EOF <?php phpinfo(); ?> EOF
  93. cat >$H_PREFIX/htdocs/index.php <<EOF <?php phpinfo(); ?> EOF
  94. Fi
  95. else
  96. echo "输入参数格式错误,请重新输入:"
  97. echo -e "\033[36mPlease Select Install Menu follow:\033[0m"
  98. echo -e "\033[32m1)、编译安装Apache服务器\033[1m"
  99. echo -e "2)、编译安装Mysql服务器"
  100. echo -e "3)、编译安装PHP服务器"
  101. echo -e "4)、配置index.php并启动LAMP服务"
  102. echo -e "\033[31mUsage(用法):{ /bin/bash $0 1|2|3|4|help \033[0m}"
  103. exit
  104. fi

记得:下面这段cat要顶格,不然好像报错,具体安装代码还没有测试,测试了再来补充。

  1. cat >$H_PREFIX/htdocs/index.php <<EOF <?php phpinfo(); ?> EOF
  2. Fi

5、for循环:

示例1–打印出15以内的数:

  1. vim for1.sh

敲入代码:

  1. #!/bin/bash
  2. #auto for 1 15
  3. #by authors zhaojiafu 2019
  4. for i in `seq 1 20`
  5. do
  6. echo "Num is $i"
  7. done

执行代码:

  1. sh for1.sh

结果:
在这里插入图片描述

示例2–求100以内的和:

  1. vim for2.sh

敲入代码:

  1. #!/bin/bash
  2. #auto 100以内的和
  3. #by authors zhaojiafu 2019
  4. sum=0
  5. for ((i=0;i<=100;i++))
  6. do
  7. sum=`expr $i + $sum`
  8. done
  9. echo $sum

执行代码和结果:
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,175人围观)

还没有评论,来说两句吧...

相关阅读

    相关 shell编程第二(变量)

    shell第二天变量 变量是用一个固定的字符串去表示一个不固定的内容,以便于修改。 自定义变量 定义变量 用户自定义变量是最常用的变量类型,其特点是变量名和