1.echo
和if else fi
命令
1 | !/bin/bash |
运行结果(demo.sh不存在):1
2
3
4hello
there
demo.sh does not exist!
File test complete!
需要注意的是filename=demo.sh
等号两边是不能有空格的;if [ -e "$filename" ]
中[]左右两侧都是有空格的。
2.shell基本操作
2.1 变量大于,等于,小于
1 | !/bin/bash |
-gt
表示大于;-lt
表示小于;-eq
表示等于。运行结果为:1
2
3greater than zero!
no less than zero!
equal to 1!
2.2 三目运算符(?:)
1 | ? is 3 operator |
和C,java等语言类似,shell中的?:
也是三目运算符。()
表示一个建立局部作用域,可以暂时屏蔽全局变量。上式的运行结果为:1
2
3t=6
b = 20
b = 10
2.3 数组
2.3.1 数组创建
1 | () create an array |
输出:1
arr[3] = 5
2.3.2 数组长度
1 | get the length of array |
输出:1
2
3
4
5
6
7
8
9length of arr is 5
length of arr is 5
```
##### 2.3.3 输出数组元素
```shell
# get all content of array
echo "arr:${arr[*]}" # 1 2 3 5 6
# or
echo "arr:${arr[@]}" # 1 2 3 5 6
输出:1
2arr:1 2 3 5 6
arr:1 2 3 5 6
2.3.4 修改数组元素
1 | assign a new element to an array |
输出:1
2arr:1 100 3 5 6
arr:1 100 3 5 6 20
注意如果赋值索引超出数组长度,相当于是给数组末尾增加一个新元素。
2.3.5 删除数组元素
1 | delete the element of array |
输出:1
2arr:1 3 5 6 20
0
unset 如果跟上数组的索引,是删除该位置的数组元素;如果直接跟数组名,相当于是清空数组。
2.3.6 数组切片
1 | arr=(1 2 4 10) |
输出:1
2
31 2 4
2
arr1:2 4
2.3.7 数组元素替换
1 | replace |
输出:1
220 4
2 40
2.4 文件操作
1 | file operation |
输出:1
2/home/lyrichu/login is not readable!
/home/lyrichu/login doesn't exist!
上面的代码首先检查t.txt
文件是否可写,如果不可写,则重新创建一个文件;然后向t.txt
文件写入字符串’test text’;接着复制t.txt文件到t.back文件;
然后判断/home/lyrichu/login
文件是否可读以及是否存在。
2.5 {}
创建一个代码块
1 | {} create a code block |
输出:1
2a=10
a=20
2.6 expr 计算表达式的值
1 | val=`expr $a + $b` # a = 20,b = 10 |
输出:1
2
3
4a + b = 30
a*b=200
a / b = 2
20 % 9 = 2
expr
可以计算shell表达式的值,上式分别计算了+
,*
,/
,%
运算,注意乘法需要使用\*
转义。
2.7 逻辑运算符
1 | if [ $a == $b ] |
输出:1
2
3a != b
20 > 10 and 10 < 20!
a > 15 or b > 15
==
用于比较数字相等;!=
用于比较数字不等。&&
表示shell中的逻辑与;||
表示shell中的逻辑或运算。
2.8 字符串操作
1 | !/bin/bash |
输出:1
2
3
4
5
6
7
8
9
10
11
12
13length of s1: 6
hsgd
hs
hsgd
sgd
abhs
ab
abHSgd
aHjHjHHsHdg
AHJhjhhshdg
ahjhjhhSHDG
demo.txt
/home/lyrichu
2.9 控制流
2.9.1 if语句
1 | a=10 |
输出:1
210 < 20!
10 < 20!
其中test
命令用来判断一条语句的真假。
2.9.2 for 语句
1 | for loop |
输出:1
2
3
4
5
6
7
8The value is 1
The value is 2
The value is 3
The value is 4
This
is
a
string
2.9.3 while 循环
1 | while loop |
输出:1
2
3
4
5
6
71
2
3
4
Press CTRL+D to exit!
Who is the most beautiful girl?yp
Yes! yp is really beautiful!
2.9.4 case 语句
1 | case mode |
输出:1
2
3
4
5
6
7
8
9Please input a number between 1 to 4!
3
Your choice is 3!
PLease input a number between 1 and 5!
5
Your input number is 5!
PLease input a number between 1 and 5!
10
Your input is not between 1 and 5!
2.10 函数
2.10.1 一个简单的没有参数,没有返回值的函数
1 | func1(){ # fuction that does not have parameters |
输出:1
This is my first function!
2.10.2 带有返回值的函数
1 | func2(){ # function with return |
输出:1
2This is function that has return!
The return value of func2 is 1
在末尾使用return
关键字即可以返回一个值,使用$?
来获取函数的返回值。
函数传递参数,获取参数总数,参数值以及第i个参数
1 | input parameters of function |
输出:1
2
3
4
5There are total 12 parameters of func3!
The first parameter is:1
The second parameter is 2
The tenth parameter is 10
The all parameters as string is:1 2 3 4 5 6 7 8 9 10 11 12
3.一些简单的shell 实例
3.1 计算3个数的最大值
1 | calculate the max value of 8,4,5 |
输出:1
The max value of 5,4,8 is 8
3.2 随机猜数
1 | !/bin/bash |
输出:1
2
3
4
5
6
7
8
9
10
11Please input a number between 1 and 10(enter quit to quit the game):
2
You guess right!
Please input a number between 1 and 10(enter quit to quit the game):
3
You guess right!
Please input a number between 1 and 10(enter quit to quit the game):
3
You guess wrong!
Please input a number between 1 and 10(enter quit to quit the game):
quit
3.3 求小于100的所有偶数的和
1 | !/bin/bash |
输出:1
The even number that less than 100's sum is 2450
3.4 输出星号(*)金字塔
1 | !/bin/bash |
输出:1
2
3
4
5 *
***
*****
*******
*********