shell 小記
變數大寫
1
2
|
TODAY=`date +"%Y%m%d"`
YESTERDAY=`date +"%Y%m%d" --date=${TODAY}-1day`
|
變數宣告 = 不能有空白
1
2
|
A = 1234 # A: command not found
B=1234 # Success
|
字串截取
1
2
|
STRING="123456789"
echo ${STRING:2:5} # 34567
|
Array 宣告
1
2
3
4
5
6
7
8
9
|
ARR=(123 456 789)
echo ${ARR[2]} # 789
echo ${#ARR[@]} # Array length
for i in "${ARR[@]}"
do
echo "$i"
# or do whatever with individual element of the array
done
|
Array join(合併) 動作
1
|
function join_by { local d=$1; shift; echo -n "$1"; shift; printf "%s" "${@/#/$d}"; }
|
How can I join elements of an array in Bash? - Stack Overflow
if 條件判斷
1
2
3
4
|
if [ ${#ERROR_ARR[@]} != 0 ]
then
echo xxxx
fi
|
多個條件判斷
1
2
3
4
|
if [ -e $FIND_FILE_320 ] && [ -e $FIND_FILE_192 ] && [ -e $FIND_FILE_30 ] && [ -e $FIND_FILE_ALBUM ]
then
echo xxx
fi
|
mysql 查詢寫回變數
FIND_ARRAY=(mysql -h xxx.xx.xx.xx -D xxxx -u xxx -p__password__ -se "SELECT xxx FROM xxx WHERE limit 100"
)
1
2
3
4
|
MYSQL_CMD="/usr/bin/mysql -u ga_user -pxxx -h xxx --database=xxx -s"
FIND_ARRAY=(`echo "SELECT xxx FROM xxxx WHERE ... and ..... < DATE_ADD(now(),INTERVAL -3 DAY) ORDER BY id LIMIT 100" | ${MYSQL_CMD}`)
FIND_ARRAY=(`mysql -h xxx -D xxx -u xxx -pxxx -se "SELECT xxx FROM xxx WHERE xxx and DATE_ADD(now(),INTERVAL -3 DAY) LIMIT 100"`)
|
function 宣告
1
2
3
|
function join_by { local d=$1; shift; echo -n "$1"; shift; printf "%s" "${@/#/$d}"; }
ERROR_SONG_ID_STRING=$(join_by , ${ERROR_SONG_ID[@]})
join_by , 1 2 3
|
function 還傳段行字串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/bin/bash
a_function() {
echo -e "Hello\nworld\n 1"
echo "Hello"
echo "world"
echo "Hello\nworld 4"
}
echo -e "Hello\nworld\n 1"
echo "Hello"
echo "world"
echo "Hello\nworld 4"
x=$(a_function "x")
echo "x-no-quotes>"
echo $x #No new lines!
echo "<x-no-quotes"
|
scripting - How to debug a bash function that returns a value, and how to add newlines to a variable? - Stack Overflow
shell script 布林運算順序
shell script 布林運算順序 | 程式狂想筆記
有關 *
linux bash / shell 有關 * 星號的事情 | 程式狂想筆記
shell 比較字串外面需要包
if 常常遇到[: ==: unary operator expected
那是因為 == 左邊沒有抓到值,或是值為 null
有兩種解決方法:
- if [ “$app-running” == "" ];
- if [[ $app-running == "" ]];
參考:Linux 的 shell script 中,遇到 unary operator expected 的解決方法
變數運算
最近使用 shell 做回圈做${index+1}
結果沒有印出來
爬文有找到幾個方法
- declare -i來聲明整數變量
1
2
3
4
|
x=1
x+=1
echo $x
# 2
|
- 使用let命令
1
2
3
4
|
i=1
let i+=1
echo $i
# 2
|
- 使用(())
1
2
3
4
|
i=1
((++i))
echo $i
# 2
|
- 使用expr命令
1
2
3
4
|
i=1
i=`expr $i + 1`
echo $i
# 2
|
- 使用$(())
1
2
3
4
|
i=1
i=$(($i + 1))
echo $i
# 2
|
- 使用$[]
1
2
3
4
|
i=1
i=$[$i + 1]
echo $i
# 2
|
我比較喜歡 $(()) 和 (())
參考來源: Shell中整数自增的几种方式_杰瑞的专栏-CSDN博客
複製檔案
cp 複製檔案可能沒注意的事情 | 程式狂想筆記
shell function 回傳只能數字
一般我們看 shell script function return 回傳值只能是數字
沒法回傳字串,仔細想想也滿有道理的
因為正常程式執行結束會回傳 exit (int)
要確定程式是否有正確執行完成 正常執行完成會回傳0
那有沒有回傳字串方法
我看到是用 function 裡面做 echo
外面用`這個符號去包
滿有趣的寫法
Shell 實作守護進程方法
TODO: LINK
SHELL 大小寫
Bash lowercase and uppercase strings – Linux Hint
在 Shell 腳本中解析選項
在 Shell 腳本中解析選項 | 始終
相關連結
Shell——你只需要了解这么多 - 枣面包的博客 - CSDN博客
[Shell Script] Day27-提高可讀性之函式寫法(三) - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
Linux Shell函数返回值 - 阳光岛主 - CSDN博客