[TOC]
## fish shell判斷某個變量是否存在
fish shell 判斷變量是否存在直接使用 `test 變量`就可以,然后我們使用`and`和`or`實現if..else..的邏輯。如下所示:<br/>
```bash
#!/usr/bin/env fish
set a 1
set b 3
test $a -gt $b ;and echo "a>b" ;or echo "a<=b"
test $c ;and echo "存在變量a";or echo "不存在變量c"
```

上面的腳本使用`and`和`or`實現了`if..else..`的邏輯,是腳本更簡潔。<br/>
因此,使用fish寫含有參數傳遞的腳本時,可以使用上面提及到的方法,先判斷參數是否存在,然后匹配參數在作出相應的執行。如下例子:<br/>
```bash
#!/usr/bin/env fish
if test $argv[1];and test $argv[1] = "help"
echo "成功匹配到 help"
else
echo "未匹配到你輸入的參數"
end
```

之所以要使用test判斷參數是否存在是因為,fish shell在變量不存在時進行匹配,將會報錯,或者警告,所以這樣做很有必要!
## bash shell如何判斷參數是否存在
bash中并不用and和or,而是使用`&&`和`||`來實現if..else..的流程控制,如下:
```bash
#!/bin/bash
a=1
b=2
test $a -gt $b && echo "a>b" || echo "a<=b"
```

```bash
#!/bin/bash
a=1
b=2
test $a -gt $b && echo "a>b" || echo "a<=b"
test $1 && echo "腳本至少輸入了一個參數" || echo "腳本沒有輸入參數"
test $2 && echo "腳本輸入了第2個參數" || echo "腳本沒有輸入第2個參數"
```

<br/>
于是我們可以這樣來進行條件判斷,這樣基本統一了fish和bash這兩種shell,不會記混了!<br/>
```bash
#!/bin/bash
if test $1 && test $1 = "hello" ;then
echo "$1"
else
echo "無法解析輸入"
fi
```
