天天看點

bash腳本總結1:[[:not found 錯誤

運作shell腳本經常碰到這個坑,但是又不知道是怎麼回事,總是懷疑bash版本是不是支援[[ 用法。

1.檢查bash版本。

bash --vserion

GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

想來基本不是版本問題。

2.[[ 使用錯誤。

在互動模式下使用:

xiaobai

@XXX

:~$ [[ 

1

]] && echo 

'successful!'

successful!

顯然這樣用是可以的。

3.那到底是哪裡出了問題呢?

使用方式來講,一般使用 sh XX.sh 或者 ./XX.sh ,嘗試一下./ 執行,果然成功。那問題的結症找到,

但是互動和腳本之間的差距在于#!/bin/bash——指定環境變量。那具體是什麼原因呢?

xiaobai

@XXX

:~$ ls -hl /bin | grep sh     

-rwxr-xr-x 

1

root root 998K Oct  

8

2014

bash

-rwxr-xr-x 

1

root root 119K Feb 

19

2014

dash

lrwxrwxrwx 

1

root root    

4

Dec 

30

00

:

59

rbash -> bash

lrwxrwxrwx 

1

root root    

4

Dec 

30

00

:

59

sh -> dash

lrwxrwxrwx 

1

root root    

4

Dec 

30

00

:

59

sh.distrib -> dash

lrwxrwxrwx 

1

root root    

7

Nov 

15

2013

static

-sh -> busybox

原來是ubuntu 的sh指向的dash、并不是環境變量指定的bash,是以說./ 是可以的。sh 方式執行不行,那麼顯而易見的是 bash XX.SH 也可以但是我們并不會經常用的。

4. 接下去的問題就是dash 和 bash 有什麼差別?

網上查了一下,ubuntu在6.10版本以後把系統預設的shell 改成了dash ,來自官方:dash(the Debian Almquist shell)是一個比bash小很多但仍相容POSIX标準的shell,它占用的磁盤空間更少,執行shell腳本比bash更快,依賴的庫檔案更少,當然,在功能上無法與bash相比。dash來自于NetBSD版本的Almquist Shell(ash)。Ubuntu中将預設shell改為dash的主要原因是效率。由于Ubuntu啟動過程中需要啟動大量的shell腳本,為了優化啟動速度和資源使用情況,Ubuntu做了這樣的改動。

5.将dash修改為bash的方法。

sudo dpkg-reconfigure dash

繼續閱讀