在 Unix 或 Linux 系统上创建脚本可能非常容易,也可能非常复杂。这完全取决于您尝试让脚本执行多少操作。在这篇文章中,我们将介绍脚本基础知识——如果您以前从未构建过脚本,如何开始。

识别外壳

今天的 Unix 和 Linux 系统有许多可以使用的 shell。每个 shell 都是一个命令解释器。它读取命令并将它们发送到内核进行处理。

Bash是最受欢迎的之一,但也有zshcsh、  tcshkorn。甚至还有一种叫做fish 的东西,由于其有用的命令自动完成选项,对 Linux 初学者来说特别好。要确定您使用的是哪个 shell,请使用以下命令:

$回声 $SHELL
/bin/bash

您还可以通过检查/etc/passwd文件来确定您的主 shell :

 
$ grep $USER /etc/passwd
nemo:x:1111:1111:Nemo the Fish:/home/nemo:/bin/bash    <== /bin/bash

确定 Linux 系统上可用的 shell 的一种方法是检查/etc/shells文件。

$ 更多 /etc/shells
# /etc/shells:有效的登录shell
/bin/sh
/bin/破折号
/bin/bash
/bin/rbash
/bin/zsh
/usr/bin/zsh
/usr/bin/屏幕
/usr/bin/tmux
/usr/bin/鱼

上面显示的系统声称有九个可用的外壳。

哪种 shell 最适合任何个人在很大程度上取决于他们习惯使用什么,因为脚本中的大部分语法并不代表您将在/bin/usr/bin/usr/local/bin 中找到的命令。相反,它们是 shell 本身的一部分,被称为“内置函数”。这包括用于循环的命令(例如,forwhile)。

编写脚本的一个简单选择是使用您在命令行上使用的任何 shell,因为毕竟,您或多或少会习惯使用它。

选择你的外壳

要确定哪些可用的 shell 将运行脚本中的命令,请将脚本的第一行设置为如下所示:

#!/bin/sh
#!/bin/破折号
#!/bin/bash
#!/bin/rbash
#!/bin/zsh
#!/usr/bin/zsh
#!/usr/bin/screen
#!/usr/bin/tmux
#!/usr/bin/fish

当脚本的第一行标识要使用的 shell 时,该 shell 将运行脚本中的命令。如果不将 shell 作为脚本的第一行包含在内,则调用脚本时使用的 shell 将是运行它的那个。

运行命令

您在 Linux 命令行上运行的任何命令都可以在脚本中运行,前提是它与指定的 shell 兼容。使用您最喜欢的文本编辑器并输入您的命令。这是一个非常简单的脚本,它以日-月-年格式显示当前日期。我称这个脚本为“今天”。

#!/bin/bash日期 +”%d %B %Y”

运行它...

今天$
2021 年 3 月 8 日

添加评论

在脚本中添加注释来解释脚本的目的是一个好主意——尤其是当脚本很长或语法很复杂时。只需以 # 号开始评论。注释可以是单独的行,也可以添加到脚本中的命令末尾。例如:

#!/bin/bash# 循环显示日期/时间
虽然是真的
做echo -n “仍在运行...”日期sleep 300 # 睡 5 分钟
完毕

使文件可执行

要使脚本可执行,请使用chmod命令并确保目标用户可以运行它。例如:

$ chmod 700 myscript # 你可以运行它
$ chmod 755 myscript # 每个人都可以运行它

如果脚本未设置为可执行,它仍然可以使用“ ” 内置“源”(即读取和运行)脚本。

美元。今天
2021 年 3 月 8 日

使用 if 命令

如果命令允许你测试条件或变量。在本例中,我们检查脚本是否在星期五运行。

if [`date +”%A”` == Friday ];then回声“TGIF!”;
菲

if命令的基本语法是“if value == other_value”。所述==执行比较,并且它的必要,以确保壳上看到比较运算符的每一侧一个值。出于这个原因,您经常需要将字符串放在某种引号中。

了解变量

为了确保这一点很清楚,了解变量以一种方式分配并以另一种方式引用很重要。仅使用其名称分配变量,但在名称前加上以使用它。

$ favnum=11
$回声 $favnum
11

提示用户输入

要在脚本中提示用户输入一些信息,您需要提供提示和命令以读取用户键入的内容。您还应该分配一个在此示例中有意义的变量名称。请注意,使用echo -n命令意味着用户将在显示提示的同一行上输入他们的响应。

echo -n “多少个循环?> “
读取 numloops

运行脚本的人将看到提示并提供他们的回应:

多少个循环?> 11

使用命令行参数

要使用用户与脚本名称一起输入的参数,您需要知道如何识别它们。脚本参数将被分配名称$1$2等。对于要重复使用的任何参数,您可以考虑将这些值分配给更有意义的变量名称。

$!/bin/bash如果 [[ $1 != [0-9]* ]]; 然后echo “错误:$1 不是数字”退出
else循环=$1
菲

在这种情况下,我们正在检查以确保提供的第一个参数是数字,如果不是则退出脚本。如果响应数字,则我们将其分配给变量$loops以供稍后在脚本中使用。

在脚本中要做的另一件事是首先验证是否存在参数。否则像上面显示的语法会失败,因为 shell 会看到“if [[ != [0-9]* ]];” 这会产生语法错误。

要检查提供的参数数量是否正确,您可以使用如下语法检查以确保至少提供了两个参数,否则提醒用户需要行数和文件名:

#!/bin/bash如果 [ $# -lt 2 ]; 然后echo “用法:$0 行文件名”出口 1
菲

不同的循环方式

有多种方法可以在脚本中循环。使用时候要循环的预定次数。例如:

#!/bin/bash周日 周一周二周三周四周五周六
做回声 $day
完毕

或者 …

#!/bin/bash用于 {a..z} 中的字母
做回声 $letter
完毕

只要某些条件存在或不存在当您想要循环时使用while

#!/bin/bashn=1而 [ $n -le 4 ]
做回声$n((n++))
完毕

使用 case 语句

Case 语句允许您的脚本根据正在检查的值做出不同的反应。在下面的脚本中,我们使用不同的命令通过识别文件类型来提取作为参数提供的文件的内容。

#!/bin/bash如果 [ $# -eq 0 ]; 然后echo -n “文件名>”读取文件名
别的文件名=$1
菲如果 [ !-f“$文件名”]; 然后echo “没有那个文件:$filename”出口
菲case $filename in*.tar) tar xf $文件名;;*.tar.bz2) tar xjf $filename;;*.tbz) tar xjf $filename;;*.tbz2) tar xjf $filename;;*.tgz) tar xzf $文件名;;*.tar.gz) tar xzf $文件名;;*.gz) gunzip $文件名;;*.bz2) bunzip2 $文件名;;*.zip) 解压 $filename;;*.Z) 解压 $filename;;*.rar) rar x $文件名;;*) 回显“$filename 没有提取选项”
esac

请注意,如果没有提供文件名,此脚本还会提示输入文件名,然后检查以确保指定的文件确实存在。只有在那之后,它才会打扰提取。

对错误的反应

您可以检测脚本中的错误并做出反应,从而避免其他错误。诀窍是在命令运行后检查退出代码。如果退出代码的值不为零,则发生错误。在此脚本中,我们查看 Apache 是否正在运行,但将检查的输出发送到/dev/null。然后我们检查退出代码是否不等于零,因为这表明ps命令没有得到响应。如果退出代码为零,脚本会通知用户 Apache 没有运行。

#!/bin/bashps -ef | grep apache2 > /dev/null
如果 [$? != 0 ]; 然后echo Apache 没有运行出口
菲相关实战:https://www.yunduoketang.com/article/pxjgwxkf.htmlhttps://www.yunduoketang.com/article/jyjgdyw.htmlhttps://www.yunduoketang.com/article/zbjyydy.htmlhttps://www.yunduoketang.com/article/ykjfwjy.htmlhttps://www.yunduoketang.com/article/znkxkq.html

Unix 和 Linux 上的基本脚本相关推荐

  1. linux 定时执行搅拌,Linux上定时shell脚本

    本文主要介绍在Linux系统上部署定时器,定时执行shell脚本,通过脚本执行sql文件 sql文件 -- 创建表 create table if not exists iot_test.iot_ta ...

  2. linux 火狐无法执行二进制文件_尝试在Linux上运行Shell脚本时“无法执行二进制文件”...

    我对linux和shell编写非常陌生.我正在尝试使用以下命令从linux上的安全shell(ssh)运行shellscript: chmod +x path/to/mynewshell.sh sh ...

  3. 在linux上运行python脚本(安装pytorch踩坑记录,pyinstaller使用方式,构建docker镜像)

    背景 脚本需要导入pytorch等库才能运行. 脚本在windows上运行成功,尝试放到linux上运行. linux服务器内存较小. 方法一:在linux上安装依赖 把脚本放到linux上,直接安装 ...

  4. 无法执行二进制文件linux,尝试在Linux上运行Shell脚本时“无法执行二进制文件”...

    我对linux和shell编写非常陌生.我正在尝试使用以下命令从linux上的安全shell(ssh)运行shellscript: chmod +x path/to/mynewshell.sh sh ...

  5. python linux上屏幕截图_在Linux上通过Python脚本拍摄屏幕截图

    我想通过python脚本截取屏幕截图,并毫不干扰地保存它. 我只对Linux解决方案感兴趣,应该支持任何基于X的环境. 任何原因您不能使用scrot? 很想检查以下建议方法的性能. 新链接:manpa ...

  6. Linux上类似vbs脚本,VBS脚本常用经典代码收集

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在网上查找资料的时候发现好多经典的vbs代码,收集起来也为了以后学习. VBS播放音乐 Dim wmp Set wmp = CreateObject(&q ...

  7. linux上如何写脚本运行?

    参考教程 1.运行格式: sh 文件名.sh 2.hello world: 在linux中创建一个train.sh:写入如下内容后,用sh即可运行, echo命令是输出命令. 3.变量: 实例: 输出 ...

  8. Linux上使用shell脚本查看内存情况(超实用)

    #!/bin/bash# tomcat启动程序(这里注意tomcat实际安装的路径) StartTomcat=/wls/jenkins/apache-tomcat-6.0.39/bin/startup ...

  9. linux 补丁脚本,Linux上打patch补丁包脚本全解

    今天我又要展示一样重要的技术--在Linux上写patch脚本,话不多说,且看: 一 . 首先要打的包肯定是回滚事物包, 就是BackUp包, 在我们要打补丁前当然要备份服务器上的数据,不然出了问题, ...

最新文章

  1. 预产期计算器在线计算生男生女计算机,预产期计算器生男生女的四种算法
  2. python中对数组合并的方法
  3. Bootloader详解
  4. 浅谈怎么玩好微博如何做微博营销
  5. js - 执行上下文和作用域以及闭包
  6. 疑似OPPO Find X2外观专利曝光:月亮形相机模组亮了
  7. windows 7 提示缺少D3DCOMPILER_47.dll的正确解决方法
  8. 对比python的进程和线程:多线程是假的
  9. 微信公众号H5页面:禁止分享操作
  10. SPI总线-物理层 协议层
  11. Solidworks二次开发环境搭建(Net)
  12. 一个屌丝程序猿的人生(四十)
  13. UE4反射机制的通俗理解【代码生成】
  14. jmap和jstat
  15. 【雅思大作文考官范文】——第三篇:essay 'skeleton'(散文“骨架”)
  16. 阿里云 mysql 修改root密码修改_设置及修改MySQL root用户密码 - MySQL中文参考手册...
  17. 如何阅读机器学习论文
  18. 腾讯云企业邮箱怎么样?
  19. 关于电脑硬盘灯常亮,电脑很卡问题
  20. android adhoc,android手机怎么连接adhoc共享电脑网络

热门文章

  1. 【springboot+云计算】B/S医院信息管理系统源码(云HIS)
  2. 宽网MP3编辑器怎么样
  3. catf1ag Web writeup(wp) 可能会持续更新
  4. whmcs不依赖index.php的方法,WHMCS版本自动升级方法
  5. 怎样做才能三年成为百万富翁
  6. 彩电赛道的狂奔,康佳、三星、索尼等“老家伙们”还能凭什么领先?
  7. 一看就会Android之手机震动的设置
  8. win10如何查看服务器日志文件,高手解读win10怎么查看日志文件的操作教程
  9. 计算机基本快捷键和基本Dos命令
  10. 17. 基于Vue+Element+nodeJs+Express+MySql后台管理系统-前端主页面