你会linux是吗?一点点。
那会shell脚本吗?不会。(就尴尬了不是)

所以抽空学习了一波shell脚本,这个语法跟php相似,但是呢有些格式要求,比如if语句,像python一样严谨。所以呢,还是要特别注意一些的。

下面就直接附上本人的学习的脚本代码,基本内容都涵盖了,有些细节问题就去查查linux命令或者看看其它教程网站都能查到。

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
#!/bin/bash
# author:dalai
# www.imdalai.com

# learn bash

# 调试bash脚本
# 将 -xv 参数添加到 #!/bin/bash后

##这一行说明要使用的 shell。
##!/bin/bash 表示脚本使用 /bin/bash。
##对于 python 脚本,就是 #!/usr/bin/python。

# 变量

name="linux"

echo ${name}
echo $name

# 拼接字符串
greeting="hello , ${name} !"
s1="good"
s2="game"
s3=${s1}${s2}

echo $s3
echo $greeting

# 循环
for skill in Ada Coffe Action Java;do
echo "${skill}script"
done

for file in `ls /home`;do
echo $file
done

# 传递参数

echo "参数个数:$#"
echo "文件名:$0"
echo "如何检查之前的命令是否运行成功:$?"

for i in "$@";do
echo $i
done

# 数组
my_arr=(a b c d 1 2 3)

for i in ${my_arr[*]};do
echo $i
done


echo ${my_arr[*]};

# 基本运算符
# + - * / % = == !=

val=`expr 2 + 2`
echo "两个数和为:$val";

a=10
b=20

let c=$a + $b #方法1
echo $c

A=5 B=6
echo $(($A+$B)) # 方法 2
echo $[$A+$B] # 方法 3
expr $A + $B # 方法 4
echo $A+$B | bc # 方法 5
awk 'BEGIN{print '"$A"'+'"$B"'}' # 方法 6
#awk是linux命令,是一个强大的文本分析工具


if [ $a == $b ]
then
echo "a==b"
fi
if [ $a != $b ]
then
echo "a!=b"
fi

# 关系运算符
# -eq -ne -gt -lt -ge -le

if [ $a -eq $b ]
then
echo "$a -eq $b : a 等于 b "
else
echo "$a -eq $b : a 不等于 b"
fi

# 布尔运算
# ! -o -a

if [ $a -lt 100 -o $b -gt 100 ]
then
echo "$a 小于 100 或者 $b 大于 100: 返回: true"
else
echo "$a 小于 100 或者 $b 大于100 ;返回 false"
fi

# 逻辑运算符
# && ||
# 跟-a 和 -o 一样

# 字符串运算符
# = != -z -n str

if [ $a = $b ]
then
echo "$a = $b : a 等于 b"
else
echo "$a =$b : a 不等于 b"
fi

# 文件检测运算符
# 可以检测文件各种权限和属性

if [ -f /var/log/messages]
then
echo "file exists"
fi

# 输出

echo it is a test
echo "\"it is a test\""

# 输出至文件

echo "it is a test" > test

echo `date`

# printf 命令

# 一些格式化输出方式

# test 命令
# 检查 数值 字符 和文件

if test $[a] -eq $[num2]
then
echo '两个数相等'
else
echo '两个数不想等'
fi

# 流程控制
# 和java php 不一样,sh的流程控制不可为空

if [ $a == $b ]
then
echo "a等于b"
elif [ $a -gt $b ]
then
echo "a大于b"
elif [ $a -lt $b ]
then
echo "a小于b"
else
echo "没有符合条件"
fi

# while 语句

int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done


# until 循环
# 很少用

# 无限循环
# while:
# do
# command
# done

# case

echo "输入1到4之间的数字"
echo '你输入的数字为:'
read num
case $num in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac

# break 和 continue
# 只能在 循环中使用 ,case 不可以,case的两个分号就是起到了break的作用

# 函数
# 可带function fun() 也可 fun()

demoFun(){
echo '第一个函数'
}

demoFun

# 函数参数
# 函数体内部,通过$n的形式获取参数,$1表示第一个参数,

# $# $* $$ $! $@ $- $?

# 输出重定向

echo 'imdalai.com' >> test

# 重定向将后面的输出的标准输出和标准错误到某文件
exec >log.txt 2>&1

# 文件包含
# . filename 或者 source filename

# ---. ./test
# ---被包含的文件test不需要可执行权限

# export
# 使变量在子shell中可用

完结。