IT技术之家

首页 > Android

Android

(shell脚本编程)linux如何利用脚本执行多条命令以及linux如何执行定时任务_shell脚本多条命令_音程

发布时间:2023-12-10 02:18:31 Android 31次 标签:bash 开发语言
文章目录变量字符串脚本中不同语句用分号隔开,和c语言一样。for, do, done是sh脚本语言的关键字。在shell脚本开头写上:#!/bin/bash“#!”是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行。变量定义变量时,变量名不加美元符号($),如:your_name="qinjx"注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。使用一个定义过的变量,只要在变量名前面加美元符号即可,如:your_name="qinjx"ec...

文章目录

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'

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

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

    \$表示$的字面值

    \`表示`的字面值

    \"表示"的字面值

    \\表示\的字面值

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


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

条件语句

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

示例如下:

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

脚本执行多条命令

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

    每个命令之间用;隔开
    说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,
    但不保证每个命令都执行成功。

    每个命令之间用&&隔开
    说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。

    每个命令之间用||隔开
    说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功
    一条命令为止。

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

最后执行:

sh condac.sh##上述名称

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

执行定时任务

执行这种任务,是靠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#看全部

需要注意一些坑:

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