日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator

發布時間:2024/10/14 Ubuntu 96 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天同事在打包 deb 時發生了如下錯誤:

[: y: unexpected operator

腳本代碼如下:

read -p " Make Release Version [y/n]:" Y if [ $Y == 'y' ] then#... else#... fi

?同事運行腳本的命令為:

sh test.sh

如果直接運行腳本(“./test.sh”)則不會有這個問題。經過上網查資料,發現是因為腳本解釋器不同造成的,整理如下:

ubuntu 中,腳本解釋器從系統 6.10 開始默認改為了 dash,而使用 sh 命令執行該腳本就是使用 dash 來執行腳本的。在該解釋器中,變量與字符串判斷是否相同使用的是一個等號,這就造成了上述問題。解決版本就是使用如下命令:

bash ./test.sh

即:通過指明解釋器軟件。或者將兩個等號改為一個等號亦可。


問題解決之后,搜索了下 sh 命令,原來其已經被軟連接至 dash 了,如下:

sh -> dash

所以用 sh 執行腳本就是用 dash 執行腳本,所以會報錯。 而直接運行腳本則默認使用了 bash,所以能夠執行成功,原因是腳本開頭寫的代碼:

#!/bin/bash

這句代碼的含義就是告訴系統,該腳本默認執行的解釋器為 bash 。

再擴展下,bash 解釋器實際上是 Bourne Again shell,它是 Linux 操作系統缺省的 shell,是Bourne shell 的擴展,簡稱 Bash 。

Bourne shell 是 UNIX 最初使用的 shell,并且在每種 UNIX 上都可以使用。

總結:

從時間軸上來說,shell 解釋器發展歷史如下:

Bourne shell

??????? |(增加大量功能)

bash(Bourne Again shell),位置:/bin/bash,使用方法:#! /bin/bash

??????? | (簡化功能)

dash(Debian Almquist Shell),位置:/bin/sh,使用方法:#! /bin/sh

(SAW:Game Over!)

總結

以上是生活随笔為你收集整理的ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。