rm -rf !(*.txt) 终端不报错为什么在脚本中会报错?

weixin_39441020 2017-07-15 02:55:32
在终端中执行rm -rf !(*.txt),成功删除.txt以外的文件,但是把这句放在脚本中,会报错。
LOCATION=/export/home/byang/Test
if [ -d $Location ]; then
cd $Location
LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH
ls *.zip > a.asc
if test -s a.asc; then
cat a.asc | while read line
do
echo $line
cd $LOCATION
7za e $line -y
done
fi
cd $LOCATION
pwd
sleep 10
rm -rf !(*.txt)
rm *Summary.txt

fi
报错信息为:
$ ./test.sh
./test.sh: line 19: syntax error near unexpected token `!(*'
./test.sh: line 19: `rm -rf !(*.txt)'
不懂为什么会报错?要怎么修改?
...全文
2614 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaowei190684 2019-10-23
  • 打赏
  • 举报
回复
引用 5 楼 gaowei190684的回复:
rm -rf !(*.txt) 在交互式shell下面 ! 表示历史记录扩展功能,语法没有错。在脚本默认关闭了历史记录扩展功能,所以语法报错。 如果怀疑我说的!的功能,请 man bash 看一下就知道了。
https://linux.die.net/man/1/bash History Expansion 部分 The shell supports a history expansion feature that is similar to the history expansion in csh. This section describes what syntax features are available. This feature is enabled by default for interactive shells, and can be disabled using the +H option to the set builtin command (see SHELL BUILTIN COMMANDS below). Non-interactive shells do not perform history expansion by default. 内容太多,后面省略,请查看链接
gaowei190684 2019-10-23
  • 打赏
  • 举报
回复
rm -rf !(*.txt) 在交互式shell下面 ! 表示历史记录扩展功能,语法没有错。在脚本默认关闭了历史记录扩展功能,所以语法报错。 如果怀疑我说的!的功能,请 man bash 看一下就知道了。
weixin_39064137 2019-05-15
  • 打赏
  • 举报
回复
登录给老铁一个赞
weixin_39441020 2017-07-18
  • 打赏
  • 举报
回复
rm -rf !(*.txt)中的括号是个特殊符号,因此会报错。替代语句是rm -rf `find . ! -name "*.txt"`.感谢大神。
weixin_39441020 2017-07-18
  • 打赏
  • 举报
回复
第一行是有#!/bin/bash的,我只是没有写到这里。
pyqix 2017-07-15
  • 打赏
  • 举报
回复
试试第一行加上 #!/bin/bash 或者 #!/bin/sh 等。
1.linux系统介绍 以windows为内核的操作系统有哪些:win10   win8   win7  xp  系统    windows server 以linux为内核的操作系统有哪些:centos  ubuntu  debian   windows和linux  linux:服务器   安全    稳定 高效    windows:办公  家用  2.安装linux注意事项 对centos系统 的基本使用   有哪些文件夹   对文件/文件夹 进行操作  创建 删除  修改 移动 复制   写入 home 存放所有用户文件的根目录  soft :安装软件 cd  ll mkdir 创建文件  touch 空文件  echo sdsd>a.txt       vi a.txt vi c.txt  打开文件  按下i键  改为写入的模式    写完之后保存: 先按下esc 按键再按下:w 保存 :q退出  :wq    写完之后不想保存 强制退出  esc  :q! 删除文件/文件夹 rm -rf a.txt  b.txt rm -rf soft 复制 如果复制文件 cp  要复制的文件名   复制出来的文件名子    cp  a.txt   a1.txt 如果复制的是文件夹的 cp -r soft/   soft1 展示一个文件中的内容 cat  移动文件  mv  temp1   temp2 重命名 mv  temp1   temp2 查找: find /(查找的路径)  -name   *.txt    b 清屏  clear tab 按键 可以帮助我们把输入的内容补全   3.配置局域网  需要通过ssh软件远程操作linux系统 远程操作centos系统  在windows操作系统中通过一款软件来远程操作虚拟电脑中的centos系统  ssh软件: xshell  secureCRT 第一步在win10系统中下载并且安装ssh软件 secureCRT    第二步:只要知道centos系统所在电脑的公网IP  登录账户和密码      /  win10和centos系统所在的两台电脑在同一个局域网内  局域网IP  登录账户和密码 第三步:centos系统 进行局域网的设置 往网卡中写入一些数据   win10写入的方式:桌面的化操作和centos系统写入的方式是不一样的  ip 网关 子网掩码 NM_conteolle。。。 命令  找到往网卡写入数据的文件    重新启动网络服务 开启22端口   重启防火墙服务 网络桥接网络  *************************端口是否开启  4.配置外网  下载软件1.下载并且安装到系统中 node.js环境   npm install bootstrap   默认的镜像库 centos系统    yum install  服务名     默认的镜像库  2.自己下载服务  wget 服务的网络地址 自己单独安装  比较灵活 安装难度大 windows系统  exe文件 linux       rpm包

1,543

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 Solaris
社区管理员
  • Solaris
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧