shell编程常用代码片断

不会写脚本的Android程序员不是好的理发师!

头都秃了,理毛啊!


获取时间1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env bash

#定义一个function,通过echo返回字符串
get_datetime() {
DATETIME=$(date "+%H:%M:%S")
echo $DATETIME
}

#以下两句效果等价
cur=`get_datetime`
cur1=$(get_datetime)

#输出示例 06:58:01
echo $cur
echo $cur1

获取时间2

1
2
#输出 2020.08.22_22.35.27
cur=`date '+%Y.%m.%d_%H.%M.%S'`

定义数组1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#https://www.linuxjournal.com/content/bash-arrays
#!/usr/bin/env bash
arr=("Hello" "World")
echo ${arr[0]} ${arr[1]}
echo $arr #只会把第一个元素打印出来

# 迭代数组元素
for item in ${arr[@]}
do
echo "$item"
done

# 数组长度
# outputs: Array size: 2
echo "Array size: ${#arr[@]}"

# 数组索引
# outputs: the index: 0 1
echo "the index: ${!arr[@]}"

# 使用uset删除指定索引元素
unset -v arr[0]
# outputs: the index: 1
echo "the index: ${!arr[@]}"

# 当有一些元素从数组被删除时,可以使用下面方法重排索引,或者你不知道索引是否存在时隙时会有用。
arr=(${arr[@]})
# outputs: the index: 0
echo "the index: ${!arr[@]}"

定义数组2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env bash
arr[0]="Hello"
arr[2]="World"

# 迭代数组元素
for item in ${arr[@]}
do
echo "$item"
done

# 数组长度
# outputs: Array size: 2
echo "Array size: ${#arr[@]}"

# 数组索引
# outputs: the index: 0 2
echo "the index: ${!arr[@]}"

# 重排索引
arr=(${arr[@]})
# outputs: the index: 0 1
echo "the index: ${!arr[@]}"

select选择

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env bash
#PS3——Shell脚本中使用select时的提示符
PS='Please enter your choice: '
options=("launcher" "settings")
select opt in "${options[@]}"
do
if [ -n "$opt" ]; then
adb shell pm list package -f|grep $opt
break;
else
echo invalid option
fi
done

输出包含换行符的字符串

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env bash
#输出包含换行符的字符串
showLines() {
echo "$1" |while read line
do
echo "$line"
done
}

packageInfosStr=`adb shell pm list package -f`
#加上双引号才能有换行
showLines "$packageInfosStr"

输出结果(成功、失败、统计个数时间)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/env bash

doSuccess() {
echo
if [ "$(uname)" == "Darwin" ]; then
echo "\033[1;36m$1\e[0m"
else
echo -e "\033[1;36m$1\e[0m"
fi
echo
}

doFailed() {
echo
if [ "$(uname)" == "Darwin" ]; then
echo "\033[1;31m$1\e[0m"
else
echo -e "\033[1;31m$1\e[0m"
fi
echo
}

doTotal() {
echo
if [ "$(uname)" == "Darwin" ]; then
echo ">>>>>>>>>>>>> \033[1;36m[ total : $1 ]\e[0m <<<<<<<<<<<<<<<"
echo ">>>>>>>>>>>>> \033[1;36m[ time : $2 secends]\e[0m <<<<<<<<<<<<<<<"
else
echo -e ">>>>>>>>>>>>> \033[1;36m[ total : $1 ]\e[0m <<<<<<<<<<<<<<<"
echo -e ">>>>>>>>>>>>> \033[1;36m[ time : $2 secends]\e[0m <<<<<<<<<<<<<<<"
fi
echo
}

doFailed "-------- [xxx] failed !!!"

doSuccess "-------- [fff] success --------"

# 统计执行时间(精确到秒)

START=`date +%s`
num=0

sleep 1
num=$($num+1)

END=`date +%s`
doTotal $num `expr $((END-START))`

失败中止

1
2
3
4
5
6
7
#!/usr/bin/env bash

sleep 1 || exit
echo "sleep 1"

timeout 1 || exit
echo "timeout 1"#不会执行到这一步,因为linux没有timeout这个命令

环境变量检查

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env bash

doCheckEnv() {
if [ -z $ANDROID_HOME ];then
doFailed "-------- please set env variable ANDROID_HOME !!!"
exit
else
echo "JAVA_HOME = $ANDROID_HOME"
fi
}

doCheckEnv