shell简明教程1简洁的shell脚本

这篇具有很好参考价值的文章主要介绍了shell简明教程1简洁的shell脚本。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1简洁的shell脚本

shell简明教程1简洁的shell脚本

1.1 Hello

脚本是包含一系列命令的命令行程序。 脚本中包含的命令由解释器执行。 在shell脚本中,shell充当解释器,一条接一条地执行脚本中列出的命令。
任何可以在命令行中执行的命令都可以放入shell脚本中。shell脚本是自动执行任务的好帮手。
让我们来看简单的shell脚本script1.sh:

#!/bin/bash
echo "Scripting is fun!"

在尝试执行脚本之前,请确保它是可执行的

$ chmod +x script-01.sh
$ ./script-01.sh 
Scripting is fun!

你会注意到,脚本的第一行以'#!'开头,后面是bash shell程序'/bin/bash'的路径。'#!'可以读成 "sharp bang"。 当脚本的第一行以'#!'可开头时,后面的内容将被用作脚本中所列命令的解释器。

1.2 变量

您可以在 shell 脚本中使用变量。变量就是有名称的存储位置。 你可以把变量看作是名称-值对。要为变量赋值,请使用语法VARIABLE_NAME="Value"。 等号前后不要使用空格。此外,变量是区分大小写的,按照惯例,变量名是大写的。要使用变量,请在变量名前加上美元符号。

$ cat script-05.sh 
#!/bin/bash
MY_SHELL="bash"
echo "I like the $MY_SHELL shell."
$ ./script-05.sh 
I like the bash shell.

也可以用大括号括住变量名,并在大括号前加上美元符号。 语法 ${variable_name} .

$ cat script-06.sh 
#!/bin/bash
MY_SHELL="bash"
echo "I like the ${MY_SHELL} shell."
$ ./script-06.sh 
I like the bash shell.

变量前面或后面非空格时通常建议加上大括号,否则会把整个字符串当成变量。

$ ./script-07.sh 
I am bashing on my keyboard.
$ cat script-08.sh 
#!/bin/bash
MY_SHELL="bash"
echo "I am $MY_SHELLing on my keyboard."
$ ./script-08.sh 
I am  on my keyboard.

您还可以将命令的输出赋值给变量, 用"$(命令)"即可,"$(命令)"用来替换原来的"hostname"

$ cat script-09.sh 
#!/bin/bash
SERVER_NAME=$(hostname)
echo "You are running this script on ${SERVER_NAME}."
$ ./script-09.sh 
You are running this script on andrew-HP.
$ cat script-10.sh 
#!/bin/bash
SERVER_NAME=`hostname`
echo "You are running this script on ${SERVER_NAME}."
$ ./script-10.sh 
You are running this script on andrew-HP.

1.3 有效的变量名

变量名可以包含字母、数字和下划线。 变量名可以字母或下划线开头,但不能以数字开头。 以下是有效变量名的示例。

# 有效的变量名
FIRST3LETTERS="ABC"
FIRST_THREE_LETTERS="ABC"
firstThreeLetters="ABC"

# 无效变量名
3LETTERS="ABC"
first-three-letters="ABC"
first@Three@Letters="ABC"

1.4 测试

设计脚本的目的是为了取代人在键盘前输入一系列命令的工作。 如果您想自动执行一项任务,但需要根据不同的情况执行不同的操作,该怎么办?由于在需要运行脚本时,人可能不在身边,无法做出决定,因此我们需要对这些情况进行测试,并让脚本采取相应的行动。
要创建测试,请在括号中加入一个条件表达式。 语法如下 "[ 测试条件 ]" 。你可以测试几种情况。 例如,可以比较字符串是否相等、数字是否大于另一个数字或文件是否存在。 下面测试检查/etc/passwd是否存在。如果存在,则返回true。如果文件不存在,则返回false。 即命令以状态1退出。

[ -e /etc/passwd ]

如果使用的是bash shell,可以运行help test命令查看可以执行的各类测试。 也可以阅读test的man页面:man test 。 下面是一些比较常见的测试。

  • 文件操作符:

    • -d FILE 如果FILE是目录,则为真。
    • -e FILE 如果FILE存在,则为真。
    • -f FILE 如果FILE存在且是普通文件,则为真。
    • -r FILE 如果FILE可读取,则为True。
    • -s FILE-如果FILE存在且不是空文件,则为True。
    • -w FILE 如果FILE可写入,则为True。
    • -x FILE 如果FILE执行可,则为True。
  • 字符串操作符

    • -z STRING如果字符串为空,则为True。
    • -n STRING-如果字符串不为空,则为True。
    • STRING 字符串不为空时为True。
    • STRING1 = STRING2 如果字符串相等,则为True。
    • string1 != string2 如果字符串不相等,则为 rue。
  • 算术运算符

    • arg1 -eq arg2 如果arg1等于arg2,则为True。
    • arg1 -ne arg2 如果arg1不等于arg2,则为True。
    • arg1 -lt arg2 如果arg1小于arg2,则为True。
    • arg1 -le arg2 True如果arg1小于或等于arg2。
    • arg1 -gt arg2 True如果arg1大于arg2。
    • arg1 -ge arg2 如果arg1大于或等于arg2,则为True。

1.5 if语句

既然知道了如何判断某个条件是否为真,就可以结合if语句在脚本中做出判断。
if语句以"if"开头,然后是一个测试。下面一行包含then. 接下来是一系列命令,如果测试条件为真,这些命令将被执行。最后,if语句以 fi结尾。 语法如下

if [ condition-true ]
then
   command 1
   command 2
   ...
fi

下面是一个例子

$ cat script-11.sh 
#!/bin/bash

MY_SHELL="bash"

if [ "$MY_SHELL" = "bash" ]
then
  echo "You seem to like the bash shell."
fi
$ ./script-11.sh 
You seem to like the bash shell.

在进行条件测试时,最好用引号将变量括起来,以防止一些意想不到的结果。

使用if/else语句还可以在条件不为真时执行操作。 下面是if/else语句的例子。

if [ condition-true ]
then
   command 1
    command 2
   ...
else  #
   command 3
   command 4
   ...
fi

修改代码走else:

#!/bin/bash

MY_SHELL="csh"

if [ "$MY_SHELL" = "bash" ]
then
  echo "You seem to like the bash shell."
else
  echo "You don't seem to like the bash shell."
fi
$ ./script-12.sh
You don't seem to like the bash shell.

还可以使用elif来测试多个条件。elif是"else if"的缩写。 和if一样,在elif后面加上要测试的条件。 在下一行,使用 then. 最后,如果条件为真,则执行一系列命令。

if [ condition-true ]
then
   command 1
   command 2
   ...
elif [ condition-true ]
then
   command 3
   command 4
   ...
else  #
   command 5
    command 6
   ...
fi

走elif的示例:

#!/bin/bash

MY_SHELL="csh"

if [ "$MY_SHELL" = "bash" ]
then
  echo "You seem to like the bash shell."
elif [ "$MY_SHELL" = "csh" ]
then
  echo "You seem to like the csh shell."
else
  echo "You don't seem to like the bash or csh shells."
fi
$ ./script-13.sh
You seem to like the csh shell.

参考资料

  • 软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
  • 本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
  • python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
  • Linux精品书籍下载 https://www.cnblogs.com/testing-/p/17438558.html

1.6 FOR循环

如果要对列表执行操作,可以使用for循环。for循环的第一行以"for"开头,然后是变量名,接着是 "in",然后是项目列表。 下一行包含单词"do"。将要执行的语句放在下面几行,最后以单行 "done"结束 for 循环。

for VARIABLE_NAME in ITEM_1 ITEM_2 ITEM_N
do
  command 1
  command 2
  ...
done

列表中的第一项被赋值给变量,代码块被执行。然后将列表中的下一项分配给变量,并执行命令。

$ cat script-14.sh
#!/bin/bash

for COLOR in red green blue
do
  echo "COLOR: $COLOR"
done
$ ./script-14.sh
COLOR: red
COLOR: green
COLOR: blue

这个名为rename-pics.sh的shell脚本会重命名所有以jpg结尾的文件,在原文件名前加上今天的日期。

#!/bin/bash

PICTURES=$(ls *jpg)
DATE=$(date +%F)
for PICTURE in $PICTURES
do
  echo "Renaming ${PICTURE} to ${DATE}-${PICTURE}"
  mv ${PICTURE} ${DATE}-${PICTURE}
done

下面是运行此脚本后的结果。

$ ls
bear.jpg  man.jpg  pig.jpg  rename-pics.sh
$ ./rename-pics.sh
Renaming bear.jpg to 2023-08-03-bear.jpg
Renaming man.jpg to 2023-08-03-man.jpg
Renaming pig.jpg to 2023-08-03-pig.jpg
$ ls
2023-08-03-bear.jpg  2023-08-03-man.jpg  2023-08-03-pig.jpg  rename-pics.sh
$

1.7 位置参数

位置参数是包含命令行内容的变量。脚本本身存储在$0,第一个参数存储在$1,第二个参数存储在$2,以此类推。 以下面的命令行为例

$ script.sh parameter1 parameter2 parameter3

内容如下: $0为"script.sh",$1为 "parameter1",$2为 "parameter2",$3为 "parameter3"。
这个名为archive_user.sh的脚本接受一个用户名参数。


#!/bin/bash

echo "Executing script: $0"
echo "Archiving user: $1"

# Lock the account
passwd -l $1

# Create an archive of the home directory.
tar cf /archives/${1}.tar.gz /home/${1}

特殊变量$@,可以访问命令行上从$1开始到最后一个的所有位置参数。 以下是如何更新 archive_user.sh 脚本以接受一个或多个参数。

#!/bin/bash

echo "Executing script: $0"

for USER in $@
do
  echo "Archiving user: $USER"

  # Lock the account
  passwd -l $USER

  # Create an archive of the home directory.
  tar cf /archives/${USER}.tar.gz /home/${USER}
done

让我们向脚本传递多个用户。

$ ./archive_user.sh chet joe
Executing script: ./archive_user.sh
Archiving user: chet
passwd: password expiry information changed.
tar: Removing leading `/' from member names
Archiving user: joe
passwd: password expiry information changed.
tar: Removing leading `/' from member names

1.8 获取用户输入

如果要接受标准输入,请使用read命令。标准输入通常来自键盘输入,但也可能来自其他来源,如命令管道中命令的输出。read命令的格式是read -p "PROMPT" VARIABLE_NAME 。 此版本的 archive_user.sh脚本会询问用户账户。

#!/bin/bash

read -p "Enter a user name: " USER
echo "Archiving user: $USER"

# Lock the account
passwd -l $USER

# Create an archive of the home directory.
tar cf /archives/${USER}.tar.gz /home/${USER}

让我们运行此脚本,将mitch账户存档。

 ./archive_user.sh
Enter a user name: mitch
Archiving user: mitch
passwd: password expiry information changed.
tar: Removing leading `/' from member names
$

shell简明教程1简洁的shell脚本文章来源地址https://www.toymoban.com/news/detail-622936.html

到了这里,关于shell简明教程1简洁的shell脚本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SAP报表简明教程

    SAP 报表简明教程   一、 报表需求,根据物料编码和物料类型 查询报表。用户输入界面要求如下:     二、 开始写代码。先进入 TCODE:SE38 ,新建一个程序。      点击创建按钮,如下图:      输入标题,写明 此程序的功能 作者,创建时间,点保存,     输入自己事先建

    2024年02月04日
    浏览(37)
  • SSH 隧道简明教程

    本章主要介绍了什么是 SSH 隧道以及如何使用 SSH 隧道,包括 SSH 隧道加密数据传输以及绕过防火墙。 SSH 隧道是 SSH 中的一种机制,它能够将其他 TCP 端口的网络数据通过 SSH 连接来转发,并且自动提供了相应的加密及解密服务。因为 SSH 为其他 TCP 链接提供了一个安全的通道来

    2024年02月06日
    浏览(41)
  • mpack简明教程

    本文先简单介绍MessagePack的基本概念。 然后,介绍一个MessagePack C API - MPack的通常使用。 接着尝试对MPack截断数据的读取。 注:本文完整代码见仓库。 如果你使用过C/C++的json库,那么上手MessagePack是比较容易的。关于C/C++ Json库的使用可见:C++ JSON库的一般使用方法-CSDN博客。

    2024年02月20日
    浏览(34)
  • 【Verilator】 1 简明教程

    我是 雪天鱼 ,一名FPGA爱好者,研究方向是FPGA架构探索和数字IC设计。 欢迎来关注我的B站账号,我将定期更新IC设计教程。 B站账号: 雪天鱼 ,https://space.bilibili.com/397002941?spm_id_from=333.1007.0.0 先从GitHub下载实验代码 以一个用SystemVerilog编写的简单ALU来作为DUT(device under test)

    2024年02月02日
    浏览(55)
  • dig 简明教程

    哈喽大家好,我是咸鱼 不知道大家在日常学习或者工作当中用 dig 命令多不多 dig 是 Domain Information Groper 的缩写,对于网络管理员和在域名系统(DNS)领域工作的小伙伴来说,它是一个非常常见且有用的工具。 无论是简单的 DNS 解析查找还是更高级的故障排除和分析, dig 都能够

    2024年02月08日
    浏览(55)
  • AI绘画工具简明教程

    官方地址 首先需要邮箱注册,等待邀请(可能需要等待一两天) 能成功登录后会进入这样一个界面 https://app.scenario.com/generators 创建模型 提供的图片集上传的时候得是jpg,还需要裁剪成正方形。批量修改图片在线网站:https://www.birme.net/ 根据图集生成图片 官方网址:https://

    2024年02月11日
    浏览(58)
  • 电商3D产品渲染简明教程

    3D 渲染让动作电影看起来更酷,让建筑设计变得栩栩如生,现在还可以帮助营销人员推广他们的产品。 从最新的《阿凡达》电影到 Spotify 的上一次营销活动,3D 的应用让一切变得更加美好。 在营销领域,3D 产品渲染可帮助品牌创建产品的高分辨率图像和视频,这些图像和视

    2024年02月13日
    浏览(28)
  • WebGPU开发简明教程【2023】

    WebGPU 是一种全新的现代 API,用于在 Web 应用程序中访问 GPU 的功能。 在 WebGPU 之前,有 WebGL,它提供了 WebGPU 功能的子集。 它启用了新一类丰富的网络内容,开发人员用它构建了令人惊叹的东西。 然而,它基于 2007 年发布的 OpenGL ES 2.0 API,而该 API 又基于更旧的 OpenGL API。

    2024年02月16日
    浏览(33)
  • Blender骨骼动画简明教程

    Blender 是首选的开源3D动画软件之一。 令人惊讶的是,开始创建简单的角色动画并不需要太多时间。 一旦获得最终的 3D 角色模型,你就可以使用该软件的众多动画功能和工具将其变为现实。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 例如,Blender 的绑定工具将帮助你实现角色

    2024年02月07日
    浏览(38)
  • 汇编语言简明教程习题答案

    (2)判断题 AX被称为累加器,在8086程序中使用很频繁。(✓) 指令指针IP寄存器属于通用寄存器。(✓) 8086具有8个32位通用寄存器。(×) 解析:8086的寄存器有8个16位通用寄存器、4个16位段寄存器、1个16位标志寄存器和1个16位指令指针寄存器 8086编程使用逻辑地址,将其中

    2023年04月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包