Ubuntu下sh *.sh使用==操作符执行报错

————《鸟哥的Linux私房菜——基础篇》学习笔记

ubuntu默认的sh是连接到dash,而我们写shell脚本时使用的时bash。bash和dash在一些方面是不兼容的。因此执行同一个脚本,两者结果不一样,可能用./*sh可以执行,而sh *.sh报错。

为了正确实行使用./*.h 或者  bash *.sh  或者把==换成=(不兼容部分)

也可以直接让系统不使用dash。。。。Ubuntu之所以使用dash是因为其体积小,兼容性高,但是悲催的时,一些bash可执行的脚步在dash下不能执行了。

鸟哥私房菜13章学习shell script 中2.2节有一个例子sh06.sh

#!/bin/bash
#Program
# "test the func of []"
#History:
#2014-08-14     Windeal
#version        1
#All rights reserved;

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "Please enter (y/n):" yn
[ "$yn" == "Y" -o "$yn" == "y" ] && echo "your input is y" && exit 0
[ "$yn" == "N" -o "$yn" == "n" ] && echo "your input is n" && exit 0
echo "I don't know what you choice\n"
~    

使用sh执行报错:

[email protected]:~/Windeal/shell$ sh sh06.sh
Please enter (y/n):y
sh06.sh: 12: [: y: unexpected operator
sh06.sh: 13: [: y: unexpected operator
I don't know what you choice

[email protected]:~/Windeal/shell$

使用./sh06.sh 可以执行

[email protected]:~/Windeal/shell$ ./sh06.sh
Please enter (y/n):y
your input is y
[email protected]:~/Windeal/shell$

Ubuntu下sh *.sh使用==操作符执行报错

时间: 2024-10-13 09:05:25

Ubuntu下sh *.sh使用==操作符执行报错的相关文章

ubuntu系统普通用户sudo命令执行报错解决方案

通过adduser user1命令创建普通用户,且使该用户具有sudo权限(将该新用户user1添加到sudo或root用户组中,或者修改/etc/sudoer文件),但是依然无法执行sudo指令,会报如下错误: sudo: /usr/lib/sudo/sudoers.so must be owned by uid 0 则需要按照如下的指示来处理: 1.首先切换为root账户 2.修改sudoers.so文件的权限,即执行以下命令:chmod 644 /usr/lib/sudo/sudoers.

ubuntu 下 eclipse启动 Android SDK Manager 报错

解决办法: 1 进入到sdk所在的目录的tools文件夹下,打开andriod可执行文件: /home/zhangdengjie/desk/developer/adt-bundle-linux-x86-20131030/sdk/tools/ 2 如图,修改指定的部分

intellj下打的jar包在linux服务器删执行报错

intellj下打的jar包在linux服务器删执行报错:http://blog.csdn.net/qq_25925973/article/details/53370501window下用解压工具打开jar包,删除META-INFO下的.SF .RSA文件,删除后上次到linux服务器上,用java jar xx.jar去执行 原文地址:http://blog.51cto.com/5731674/2087591

CentOS5.6下安装Oracle10G软件(包含报错经验)

CentOS5.6下安装Oracle10G ******************************************************************************** *目标:在Centos系统下,安装Oracle10g软件 *步骤: *                1.安装包 *                2.域名解析设置及网络配置 *                3.创建用户.组 *                4.配置内核参数.修改环境变量

CentOS5.6下安装Oracle10G软件 【保留报错经验】

CentOS5.6下安装Oracle10G ******************************************************************************** *目标:在Centos系统下,安装Oracle10g软件 *步骤: *                1.安装包 *                2.域名解析设置及网络配置 *                3.创建用户.组 *                4.配置内核參数.改动环境变量

ubuntu上跑python连接pg,报错 ImportError: No module named psycopg2

ubuntu上跑python连接pg,报错  ImportError: No module named psycopg2 [email protected]:~# python /home/zxw/PGWriterTest_m.py Traceback (most recent call last): File "/home/zxw/PGWriterTest_m.py", line 4, in <module> import psycopg2 ImportError: No

oracle创建包后执行报错:object omgmig.test_package is invalid.

今天学习了一下oracle的包的写法,然后碰到这么个问题.包声明和包主体都正确,但是就是执行报错:object omgmig.test_package is invalid. 这是会报错的sql,看起来都正常对吧..但是就是会报错 --包声明 create package omgmig.test_package as procedure show1; end omgmig.test_package; --包体 create package body omgmig.test_package as

Linux 下使用C语言 gets()函数报错

在Linux下,使用 gets(cmd) 函数报错:warning: the 'gets' function is dangerous and should not be used. 解决办法:采用 fgets(cmd,100,stdin);//100为size 问题解决! fgets从stdin中读字符,直至读到换行符或文件结束,但一次最多读size个字符.读出的字符连同换行符存入缓冲区cmd中.返回指向cmd的指针. gets把从stdin中输入的一行信息存入cmd中,然后将换行符置换成串结

解决Win7下运行php Composer出现SSL报错的问题

以前都在linux环境使用php composer.今天尝试在win7下运行composer却出现SSL报错: D:\data\www\mmoyu\symapp>php -f %phprc%\composer install Loading composer repositories with package information [Composer\Downloader\TransportException] The "https://packagist.org/packages.js