以下是编写shell脚本时要使用的一些准则.

>使用它们时始终引用变量.这有助于避免误解的可能性. (如果文件名包含空格怎么办?)

>不要相信像rm这样的命令上的文件加载.请改用循环. (如果文件名以连字符开头怎么办?)

>尽可能避免使用子壳.带反引号的线条让我发痒.

>如果你能提供帮助,请不要执行.特别是在你的exec实际运行之后,不要指望脚本的任何部分.@H_502_2@

我应该指出,虽然你的shell可能是bash,但你已经指定了/ bin / sh来执行这个脚本,所以它不是一个bash脚本.@H_502_2@

这是一个重写错误检查.加盐调味.@H_502_2@#!/bin/sh

# Linux

wget=/usr/bin/wget

tar=/bin/tar

apachectl=/usr/sbin/apache2ctl

# FreeBSD

#wget=/usr/local/bin/wget

#tar=/usr/bin/tar

#apachectl=/usr/local/sbin/apachectl

TXT="GOT TO THE END,YEAH"

WORKING_DIR="/var/asl/updates"

TARGET_DIR="/usr/local/apache/conf/modsec_rules/"

EXISTING_FILES_DIR="/var/asl/updates/modsec/"

EXISTING_ARCH="/var/asl/updates/"

URL_BASE="http://updates.atomicorp.com/channels/rules/subscription"

WGET_OPTS='--user="jim" --password="xxx-yyy-zzz"'

if [ ! -x "$wget" ]; then

echo "ERROR: No wget." >&2

exit 1

elif [ ! -x "$apachectl" ]; then

echo "ERROR: No apachectl." >&2

exit 1

elif [ ! -x "$tar" ]; then

echo "ERROR: Not in Kansas anymore,Toto." >&2

exit 1

fi

# change to working directory and cleanup any downloaded files

# and extracted rules in modsec/ directory

if ! cd "$WORKING_DIR"; then

echo "ERROR: can't access working directory ($WORKING_DIR)" >&2

exit 1

fi

# Delete each file in a loop.

for file in "$EXISTING_FILES_DIR"/* "$EXISTING_ARCH_DIR"/modsec-*; do

rm -f "$file"

done

# Move old VERSION out of the way.

mv VERSION VERSION-$$

# wget1 to download VERSION file (replaces WGET1)

if ! $wget $WGET_OPTS $URL_BASE}/VERSION; then

echo "ERROR: can't get VERSION" >&2

mv VERSION-$$VERSION

exit 1

fi

# get current MODSEC_VERSION from VERSION file and save as variable,# but DON'T blindly trust and run scripts from an external source.

if grep -q '^MODSEC_VERSION=' VERSION; then

TARGET_DATE="`sed -ne '/^MODSEC_VERSION=/{s/^[^=]*=//p;q;}' VERSION`"

echo "Target date: $TARGET_DATE"

fi

# Download current archive (replaces WGET2)

if ! $wget ${WGET_OPTS} "${URL_BASE}/modsec-$TARGET_DATE.tar.gz"; then

echo "ERROR: can't get archive" >&2

mv VERSION-$$VERSION # Do this,don't do this,I don't know your needs.

exit 1

fi

# extract archive

if [ ! -f "$WORKING_DIR/modsec-${TARGET_DATE}.tar.gz" ]; then

echo "ERROR: I'm confused,where's my archive?" >&2

mv VERSION-$$VERSION # Do this,I don't know your needs.

exit 1

fi

tar zxvf "$WORKING_DIR/modsec-${TARGET_DATE}.tar.gz"

for file in "$EXISTING_FILES_DIR"/*; do

cp "$file" "$TARGET_DIR/"

done

# So far so good,so let's restart apache.

if $apachectl configtest; then

if $apachectl restart; then

# Success!

rm -f VERSION-$$

echo "$TXT"

else

echo "ERROR: PANIC! Apache didn't restart. Notify the authorities!" >&2

exit 3

fi

else

echo "ERROR: Apache configs are broken. We're still running,but you'd better fix this ASAP." >&2

exit 2

fi

请注意,虽然我已经将其重写为更加明智,但仍然有很大的改进空间.@H_502_2@

linux shell脚本 wget,bash – 在shell脚本中运行wget和其他命令相关推荐

  1. Linux 学习记录 四(Bash 和 Shell scirpt).

    一.什么是 Shell? 狭义的shell指的是指令列方面的软件,包括基本的Linux操作窗口Bash等,广义的shell则包括 图形接口的软件,因为图形接口其实也可以操作各种驱动程序来呼叫核心进行工 ...

  2. 如何在浏览器中运行Linux程序,如何在Chromebook的浏览器标签中运行完整的Linux桌面 | MOS86...

    Crouton是在Chromebook上运行Linux操作系统的最佳方法.现在吧 这是它 工作原理相关文章图片1tupian购买适用于Linux的Chromebook时,需要牢记4件事 这种方法需要一 ...

  3. linux shell fifo使用,bash – 在shell脚本中使用mkfifo

    我试图用FIFO做一些简单的事情:读取线条,但不是一次性完成,而且意外地"不起作用". 还行吧: $f=$(mktemp -u) $mkfifo $f ${ seq 5 > ...

  4. shell 脚本和 bash 脚本的关系

    Shell 分类 常见的 Shell 有 sh.bash.csh.tcsh.ash 等.其中 bash shell 是 Linux 的默认 shell.即 bash 是 shell 的一种. bash ...

  5. C语言程序中调用脚本,C语言调用SHELL脚本

    在Linux 环境下Shell脚本具有非常强大的功能!使用Shell可以很方便的使用和管理Linux系统,最近学习了一点shell知识,所以一直在 想要是可以在C/C++中调用shell脚本那该有多 ...

  6. linux shell #[感叹号]/bin/bash 是什么意思?

    垃圾CSDN,标题里感叹号都发不出来! 文章目录 #!/bin/bash简介 1)`#!/bin/bash`只能放在第一行,如果后面还有`#!`,那么只能看成是注释. 2)#!后面的路径一定要正确,不 ...

  7. 第十一章 认识 BASH 这个 Shell

    我们在第一章 Linux 是什么当中提到了: 管理整个计算机硬件的其实是操作系统的核心 (kernel),这个核心是需要被保护的! 所以我们一般使用者就只能 透过 shell 来跟核心沟通,以让核心达 ...

  8. Linux初学:(二)Shell环境与命令基础

    博客园(FOREVER_ENJOY):http://www.cnblogs.com/zyx1314/ 本文版权归作者所有:欢迎转载!请注明文章作者和原文连接 Shell是什么? 1. Shell作为应 ...

  9. Linux系列6:bash学习

    bash学习 1 认识 BASH 这个 Shell 1.1 硬件.核心与 Shell 1.2 为何要学文字接口的 shell 1.2.1 文字接口的 shell:大家都一样! 1.2.2 远程管理:文 ...

最新文章

  1. 测试Python下载图片的三种方法
  2. iangularjs 模板_AngularJS中的模板安全与作用域绑定
  3. 微服务实战(五):微服务的事件驱动数据管理
  4. Vue + VueRouter + Vuex + Axios 抓取 GitHub 上的 Issues 来搭建个人博客站点
  5. linux 误删除mysql表能恢复吗,Linux误删数据恢复
  6. 6大设计原则之单一职责原则
  7. 8除以2表示什么意思_八字中劫财,比肩分别表示什么意思
  8. php变量显示,php – 显示会话变量
  9. pandas将所0值修改为NaN
  10. Delphi XE中String、ANSIString、TBytes之间的转换
  11. 电压放大倍数公式运放_三点出发,学习运算放大器不再“犯难”
  12. java重置radiobutton的选项_动态添加试题选项按钮 radioButton(一)
  13. 桌面在计算机哪个文件,计算机中win7系统桌面文件在c盘哪个文件夹
  14. yolov5s-6.0网络模型结构图
  15. link标签的real属性理解
  16. android实战理财,基于Android的理财系统APP的设计
  17. 有趣的深度学习——使用TensorFlow 2.0 + RNN 实现一个古体诗生成器
  18. Vue3项目运行时报错,提示Use // eslint-disable-next-line to ignore the next line.
  19. 牛客网项目——前置技术(八):Kafka
  20. 人脸识别论文:Partial FC: Training 10 Million Identities on a Single Machine

热门文章

  1. 【Verilog】基于Nexys4DDR开发板实现数字钟
  2. 『Lucas定理以及拓展Lucas』
  3. 数字经济论坛、阿里研究院、毕马威联合发布《2018全球数字经济发展指数》
  4. D1net阅闻:IBM宣布推出全新存储技术 存储速度快70倍
  5. JavaScript(15)jQuery 选择器
  6. ping tracert 联系区别
  7. [译]Chipmunk 教程2 - 基本概念
  8. .NET Pet Shop 4.0案例研究预览篇
  9. 堆排序之 大顶堆和小顶堆 c语言
  10. skb_shinfo(skb)-dataref 含义