扫描二维码关注官方公众号
返回列表 发布新帖

[求助/问答] 制作一键安装脚本的问题请教

1936 12
发表于 2014-6-11 19:59:15 | 显示全部楼层 阅读模式

来吧兄弟,一起玩一起讨论!

您需要 登录 才可以下载或查看,没有账号?注册

×
考虑了一下,制作一键安装的脚本涉及到的操作有如下几个:
1、移动文件到指定目录(mv oldname newname)
2、创建目录(mkdir dirname)
3、修改权限(chmod 755 filename)
4、删除文件(rm -f filename)
以上几个基本命令都知道如何操作。
但是,该如何实现如下功能呢:
5、将指定文件中的某行数据修改为指定的语句
例如:修改 /etc/profile 中的
PATH=/sbin:/bin:/usr/sbin:
修改为:
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/


6、如何得知某句的执行结果?(我的意思是执行完这一句语句后,再执行下一句语句)

请各位大大不吝赐教!

评论12

sancomeLv.10 发表于 2014-6-11 21:04:07 | 显示全部楼层
5、sed -i 's/.*PATH.*/PATH=\/sbin:\/bin:\/usr\/sbin:\/usr\/bin:\/usr\/syno\/sbin:\//' /etc/profile
6、写在脚本里的语句都是顺序执行的,执行完第一条语句才会执行第二条语句。
执行‘ sed -i 's/.*PATH.*/PATH=\/sbin:\/bin:\/usr\/sbin:\/usr\/bin:\/usr\/syno\/sbin:\//' /etc/profile 后,将/etc/profile中PATH下一行的export PATH也替换掉了。 也就是出现了两行一模一样的 PATH=/sbin:/bi  详情 回复
发表于 2014-6-11 22:14
我试一试,非常感谢!  详情 回复
发表于 2014-6-11 21:42
请通过 捐赠 来支持我的工作
回复 点赞

使用道具 举报

kayy楼主Lv.7 发表于 2014-6-11 21:42:01 | 显示全部楼层
sancome 发表于 2014-6-11 21:04
5、sed -i 's/.*PATH.*/PATH=\/sbin:\/bin:\/usr\/sbin:\/usr\/bin:\/usr\/syno\/sbin:\//' /etc/profile
6 ...

我试一试,非常感谢!
回复 点赞

使用道具 举报

pk6930056Lv.3 发表于 2014-6-11 21:47:23 | 显示全部楼层
学习了,长见识,虽然还不会用
回复 点赞

使用道具 举报

kayy楼主Lv.7 发表于 2014-6-11 22:14:58 | 显示全部楼层
sancome 发表于 2014-6-11 21:04
5、sed -i 's/.*PATH.*/PATH=\/sbin:\/bin:\/usr\/sbin:\/usr\/bin:\/usr\/syno\/sbin:\//' /etc/profile
6 ...

执行‘
sed -i 's/.*PATH.*/PATH=\/sbin:\/bin:\/usr\/sbin:\/usr\/bin:\/usr\/syno\/sbin:\//' /etc/profile
后,将/etc/profile中PATH下一行的export PATH也替换掉了。
也就是出现了两行一模一样的
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/

请问如何解决?
回复 点赞

使用道具 举报

sancomeLv.10 发表于 2014-6-11 22:16:23 | 显示全部楼层
你把/etc/profile文件的全部内容贴出来我看下
如上。感谢!  详情 回复
发表于 2014-6-11 22:39
请通过 捐赠 来支持我的工作
回复 点赞

使用道具 举报

kayy楼主Lv.7 发表于 2014-6-11 22:39:17 | 显示全部楼层
sancome 发表于 2014-6-11 22:16
你把/etc/profile文件的全部内容贴出来我看下
  1. #/etc/profile: system-wide .profile file for ash.

  2. umask 022

  3. PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin
  4. export PATH

  5. #This fixes the backspace when telnetting in.
  6. #if [ "$TERM" != "linux" ]; then
  7. #        stty erase
  8. #fi
  9. PGDATA=/var/services/pgsql
  10. export PGDATA

  11. TERMINFO=/usr/share/terminfo
  12. export TERMINFO

  13. TERM=${TERM:-cons25}
  14. export TERM

  15. PAGER=more
  16. export PAGER

  17. export LC_ALL=en_US.utf8
  18. export LANG=en_US.utf8

  19. PS1="`hostname`> "

  20. alias dir="ls -al"
  21. alias ll="ls -la"

  22. ulimit -c unlimited
复制代码


如上。感谢!
回复 点赞

使用道具 举报

sancomeLv.10 发表于 2014-6-11 22:50:36 | 显示全部楼层
改成这样就行了:
sed -i 's/.*PATH=.*/PATH=\/sbin:\/bin:\/usr\/sbin:\/usr\/bin:\/usr\/syno\/sbin:\//' /etc/profile
大神,再次请教一个问题。我的想法是将如上的配置文件写入一个新建的文件里面。但是问题来了,由于以上的配置文件中,有大量的转义字符,例如:"、'、$等等,导致使用 echo "...." > filename 的时候出错。请问如  详情 回复
发表于 2014-6-13 16:19
OK,测试正常。 再次感谢!  详情 回复
发表于 2014-6-11 22:56
请通过 捐赠 来支持我的工作
回复 点赞

使用道具 举报

kayy楼主Lv.7 发表于 2014-6-11 22:56:43 | 显示全部楼层
sancome 发表于 2014-6-11 22:50
改成这样就行了:
sed -i 's/.*PATH=.*/PATH=\/sbin:\/bin:\/usr\/sbin:\/usr\/bin:\/usr\/syno\/sbin:\//' ...

OK,测试正常。
再次感谢!
回复 点赞

使用道具 举报

kayy楼主Lv.7 发表于 2014-6-13 16:19:29 | 显示全部楼层
sancome 发表于 2014-6-11 22:50
改成这样就行了:
sed -i 's/.*PATH=.*/PATH=\/sbin:\/bin:\/usr\/sbin:\/usr\/bin:\/usr\/syno\/sbin:\//' ...
  1. #! /bin/sh

  2. if test -z "${REAL_OPT_DIR}"; then
  3. # next line to be replaced according to OPTWARE_TARGET
  4. REAL_OPT_DIR=/volume2/@optware
  5. fi

  6. case "$1" in
  7.     start)
  8.         echo "Starting Optware."
  9.         if test -n "${REAL_OPT_DIR}"; then
  10.             if ! grep ' /opt ' /proc/mounts >/dev/null 2>&1 ; then
  11.                 mkdir -p /opt
  12.                 mount -o bind ${REAL_OPT_DIR} /opt
  13.             fi  
  14.         fi
  15.     [ -x /opt/etc/rc.optware ] && /opt/etc/rc.optware
  16.     ;;
  17.     reconfig)
  18.     true
  19.     ;;
  20.     stop)
  21.         echo "Shutting down Optware."
  22.     true
  23.     ;;
  24.     *)
  25.         echo "Usage: $0 {start|stop|reconfig}"
  26.         exit 1
  27. esac

  28. exit 0
复制代码


大神,再次请教一个问题。我的想法是将如上的配置文件写入一个新建的文件里面。但是问题来了,由于以上的配置文件中,有大量的转义字符,例如:"、'、$等等,导致使用 echo "...." > filename 的时候出错。请问如何解决?
回复 点赞

使用道具 举报

frostetLv.10 发表于 2014-6-13 16:24:12 | 显示全部楼层
哇,都是大神~~~
回复 点赞

使用道具 举报

sancomeLv.10 发表于 2014-6-13 21:08:20 来自手机 | 显示全部楼层
不用echo,参考这个:
touch /usr/syno/etc/rc.d/S99ZZZ_Shutdown.sh
chmod a+x /usr/syno/etc/rc.d/S99ZZZ_Shutdown.sh
cat >/usr/syno/etc/rc.d/S99ZZZ_Shutdown.sh<<EOF
#!/bin/sh

case \$1 in
start)
        if [ -f /var/packages/shutdown_script/DSShutdown.sh ]; then
                /var/packages/shutdown_script/DSShutdown.sh &
        fi
        ;;
stop)
        if [ -f /var/tmp/shut.down ]; then
                rm /var/tmp/shut.down
        fi
        ifconfig eth0 down
        ;;
*)
        echo "Usage: \$0 [start|stop]"
        ;;
esac
EOF
实测可用。而且这样使用更方便,哈哈,谢谢!  详情 回复
发表于 2014-6-13 23:30
回复 点赞

使用道具 举报

kayy楼主Lv.7 发表于 2014-6-13 23:30:09 | 显示全部楼层
sancome 发表于 2014-6-13 21:08
不用echo,参考这个:
touch /usr/syno/etc/rc.d/S99ZZZ_Shutdown.sh
chmod a+x /usr/syno/etc/rc.d/S99ZZZ ...

实测可用。而且这样使用更方便,哈哈,谢谢!
回复 点赞

使用道具 举报

回复

懒得打字嘛,点击右侧快捷回复 【本站酷狼4T,750元】
您需要登录后才可以回帖 登录 | 注册

本版积分规则

投诉/建议联系

support@gebi1.cn

未经授权禁止转载,复制和建立镜像,
如有违反,追究法律责任
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2024 隔壁网 版权所有 All Rights Reserved. 粤ICP备14056481号-1
关灯 在本版发帖
扫一扫添加微信客服
返回顶部
快速回复 返回顶部 返回列表