文章目录

  • shell脚本编程
  • 条件语句
  • 脚本执行多条命令
  • 执行定时任务


本文着重于提高我们的生产力,所以将这几个作为了一个专题。

shell脚本编程

脚本中不同语句用分号隔开,和c语言一样。

for, do, done是sh脚本语言的关键字。

在shell脚本开头写上:

#!/bin/bash
“#!”是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行。

变量:定义变量时,变量名不加美元符号($),如:

your_name="qinjx"

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="qinjx"

echo $your_name#或者
echo ${your_name}

推荐给所有变量加上花括号,这是个好的编程习惯。

字符串:字符串可以用单引号,也可以用双引号,也可以不用引号。

str='this is a string'

单引号字符串的限制:
•单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
•单引号字串中不能出现单引号(对单引号使用转义符后也不行)

双引号条中转义字符只在下面情况生效,单引号什么都不生效。

\$表示$的字面值

    \`表示`的字面值

    \"表示"的字面值

    \\表示\的字面值

    除以上情况之外,在其它字符前面的\无特殊含义,只表示字面值。

python 批量执行sh命令 python执行多条shell命令_python 批量执行sh命令


另外,双引号中可以使用变量。

python 批量执行sh命令 python执行多条shell命令_bash_02

条件语句
if 条件测试操作
then
命令序列
fi

示例如下:

if [ $a = "男"  ]
then
        echo "$a 组"
else
        echo "女 组"
fi

脚本执行多条命令

比如我们要添加镜像源的时候,要添加很多,那么我们可以使用shell脚本来帮助我们,但是问题在于命令之间用什么来隔开呢?

  1. 每个命令之间用;隔开
    说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,
    但不保证每个命令都执行成功。
  2. 每个命令之间用&&隔开
    说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
  3. 每个命令之间用||隔开
    说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功
    一条命令为止。

新建一个文件,随便命名,打开这个文件,我们选择1,然后保存退出,如下:

python 批量执行sh命令 python执行多条shell命令_定时任务_03


最后执行:

sh condac.sh##上述名称

发现成功添加了这么多的镜像源:

python 批量执行sh命令 python执行多条shell命令_python 批量执行sh命令_04

执行定时任务

执行这种任务,是靠crond服务程序来完成的,所以你得看这个服务程序是否打开,以Centos为例,如下:

systemctl status crond

如果是active的状态,说明可以使用,我们使用crontab工具:

#编辑定时任务:
crontab -e
#默认会进入vi编辑器

其格式

格式:  
*  *  * *  *  command
分 时 日 月 周  命令
1、crontab -e 回车
2、添加任务,并保存
#每天下午19:00定时关机
55 18 * * * /usr/sbin/shutdown -h 19:00
00 19 * * * /usr/sbin/shutdown now#同上。
* * * * * echo 123#每一秒钟都输出123.
0  */1  *  *  *#每小时执行。
3、查看任务列表
crontab -l
#查看定时任务执行情况:
tail -f /var/log/cron#看最近情况
cat /var/log/cron#看全部

需要注意一些坑:

  1. 我用ssh登录的时候,在定时任务里面使用ls打印目录,但是根本不会在我的ssh屏幕上显示!但是这个任务其实是已经执行了的,不信,你可以将ls的输出重定向到文件来验证。类似的还有上述echo这样的,也是。
  2. ls这种可以不使用ls的绝对路径,我们看到上述使用了/usr/sbin/shutdown,这种是绝对路径,一般来说系统内置的命令可以不使用绝对路径,但是你自己安装的一些程序,需要使用绝对路径!!!我就被坑了,比如python test.py,在命令行中这么用可以,但是在定时任务中不可以,需要填写python的绝对路径。
  3. 不同定时任务之间,直接换行即可,不需要用;号分隔。
  4. 你的定时任务中的命令如果不是绝对路径,即/开头的,那么都是Home目录的相对路径,这个也要切记。比如上面的python由于没有写绝对路径,就以为是执行home目录下的python!