程式狂想筆記

一個攻城師奮鬥史

0%

Shell Script 小記

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}
結果沒有印出來
爬文有找到幾個方法

  1. declare -i來聲明整數變量

    1
    2
    3
    4
    x=1
    x+=1
    echo $x
    # 2
  2. 使用let命令

1
2
3
4
i=1
let i+=1
echo $i
# 2
  1. 使用(())
1
2
3
4
i=1
((++i))
echo $i
# 2
  1. 使用expr命令
1
2
3
4
i=1
i=`expr $i + 1`
echo $i
# 2
  1. 使用$(())
1
2
3
4
i=1
i=$(($i + 1))
echo $i
# 2
  1. 使用$[]
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博客