1、新建test.sh文件
vim test.sh
进入vim界面,i进入编辑模式,输入下面的代码,然后esc,进入底部命令模式,然后:wq!强制保存并退出。
1 #!/bin/bash
2 echo "hello word"
或者直接用sublime等新建后缀是.sh的文件。
2、给.sh文件添加可执行权限
1 chmod +x ./test.sh #使脚本具有执行权限
2 chmod 777 ./test.sh #777可读可写可执行
3、运行该文件
1 ./test.sh #执行脚本
4、shell变量
4.1.定义变量时,变量名不加美元符号
1 your_name="runoob.com"
2
3 有效的变量名称:
4 RUNOOB
5 LD_LIBRARY_PATH
6 _var
7 var2
定义变量规则:
- 变量名和等号之间不能有空格
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
4.2.使用变量
以下两种输出方式都ok,但是尽量用第二种
your_name="runoob.com"
echo $you_name
echo ${you_name}
echo I am good at ${you_name}Script . 会输出完整的句子
echo I am good at $you_name Script 。 会将you_name理解为新的变量,值为空
4.3.只读变量
1 #!/bin/bash
2 myUrl="http://www.google.com"
3 readonly myUrl
4
5
6 运行脚本会报错
7 /bin/sh: NAME: This variable is read only.
4.4.删除变量
#!/bin/sh
myUrl="http://www.runoob.com"
unset myUrl
echo $myUrl
注意:unset不能删除只读变量
4.5.变量类型
- 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
4.6.字符串操作
1 获取字符串长度#
2 string="abcd"
3 echo ${#string} #输出 4
4
5 截取字符串
6 string="runoob is a great site"
7 echo ${string:1:4} # 输出 unoo
8
9 查找子字符串
10 string="runoob is a great site"
11 echo `expr index "$string" io` # 输出 4
12 注意: 以上脚本中 ` 是反引号,而不是单引号 ',不要看错了哦。
5、数组
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)
Shell 数组用括号来表示,元素用"空格"符号分割开
1 定义数组,在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
2 数组名=(值1 值2 ... 值n)
3 array_name=(value0 value1 value2 value3)
4 或者
5 array_name=(
6 value0
7 value1
8 value2
9 value3
10 )
11 或者
12 array_name[0]=value0
13 array_name[1]=value1
14 array_name[n]=valuen
15
16 读取数组
17 valuen=${array_name[n]}
18
19 使用 @ 符号可以获取数组中的所有元素,例如:
20 echo ${array_name[@]}
21
22
23 # 取得数组元素的个数
24 length=${#array_name[@]}
25 # 或者
26 length=${#array_name[*]}
27 # 取得数组单个元素的长度
28 lengthn=${#array_name[n]}
29
30
31 例子
32 arr=(9 2 'Aaa' 'B')
33 echo ${arr[@]}
34 echo ${arr[*]}
35 len=${#arr[*]}
36 echo $len
37 echo "数组元素个数为: ${#arr[@]}"
38
39
40 输出=========
41 ./test2.sh
42 9 2 Aaa B
43 9 2 Aaa B
44 4
45 数组元素个数为: 4
6、注释
1 单行注释
2 #--------------------------------------------
3 # 这是一个注释
4 # author:菜鸟教程
5 多行注释
6 :<<EOF
7 注释内容...
8 注释内容...
9 注释内容...
10 EOF
11 或者
12 :<<'
13 注释内容...
14 注释内容...
15 注释内容...
16 '
17
18 :<<!
19 注释内容...
20 注释内容...
21 注释内容...
22 !
7、Shell 传递参数
1 1、传递参数
2 echo "hi,no: $0"
3 echo "hi,no: $1"
4 echo "hi,no: $2"
5
6 运行
7 ./test1.sh 'one' 'two' 'three'
8
9 Hello World !
10 hi,no: ./test1.sh -- 会把运行的那个文件名默认是第0个字段
11 hi,no: one
12 hi,no: two
13
14
15 2、$*与$@的区别
16 都是引用所有的参数,但是$*是把出入的参数当成一个字符串去展示,$@当成一个个的字符
17 echo "-- \$* 演示 ---"
18 for i in "$*"; do
19 echo $i
20 done
21
22 echo "-- \$@ 演示 ---"
23 for i in "$@"; do
24 echo $i
25 done
26
27 运行
28 ./test1.sh 'one' 'two' 'three'
29 -- $* 演示 ---
30 one two three
31 -- $@ 演示 ---
32 one
33 two
34 three
8、Shell 基本运算符
- 算数运算符
- 关系运算符
- 布尔运算符
- 字符串运算符
- 文件测试运算符
# 运算符,expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
val=`expr 1 + 1`
echo $val
注意:表达式和运算符之间要有空格,1+1正确
8.1、算数运算符
1 #!/bin/bash
2
3 # 运算符,expr 是一款表达式计算工具,使用它能完成表达式的求值操作。1 + 1之间必须有空格
4 val=`expr 1 + 1`
5 echo $val
6
7 a=10
8 b=20
9 if [ a = b ]
10 then
11 echo "a等于b"
12 else
13 echo "a不等于b"
14 fi
15
16 a=10
17 b=20
18
19 val=`expr $a + $b`
20 echo "a + b : $val"
21
22 val=`expr $a - $b`
23 echo "a - b : $val"
24
25 val=`expr $a \* $b`
26 echo "a * b : $val"
27
28 val=`expr $b / $a`
29 echo "b / a : $val"
30
31 val=`expr $b % $a`
32 echo "b % a : $val"
33
34 if [ $a == $b ]
35 then
36 echo "a 等于 b"
37 fi
38 if [ $a != $b ]
39 then
40 echo "a 不等于 b"
41 fi
8.2、关系运算符
1 -eq =====equal等于
2 -ne =====not equal 不等于
3 -gt =====greater than a>b
4 -lt =====less than a<b
5 -ge =====greater than or equal a>=b
6 -le =====less than or equal a>=b
7
8
9
10 a=10
11 b=20
12
13 if [ $a -eq $b ]
14 then
15 echo "$a -eq $b : a 等于 b"
16 else
17 echo "$a -eq $b: a 不等于 b"
18 fi
19 if [ $a -ne $b ]
20 then
21 echo "$a -ne $b: a 不等于 b"
22 else
23 echo "$a -ne $b : a 等于 b"
24 fi
25 if [ $a -gt $b ]
26 then
27 echo "$a -gt $b: a 大于 b"
28 else
29 echo "$a -gt $b: a 不大于 b"
30 fi
31 if [ $a -lt $b ]
32 then
33 echo "$a -lt $b: a 小于 b"
34 else
35 echo "$a -lt $b: a 不小于 b"
36 fi
37 if [ $a -ge $b ]
38 then
39 echo "$a -ge $b: a 大于或等于 b"
40 else
41 echo "$a -ge $b: a 小于 b"
42 fi
43 if [ $a -le $b ]
44 then
45 echo "$a -le $b: a 小于或等于 b"
46 else
47 echo "$a -le $b: a 大于 b"
48 fi
8.3、布尔运算符
1 a=10
2 b=20
3 if [ $a != $b ];then
4 echo "$a != $b : a不等于b"
5 else
6 echo "$a == $b : a等于b"
7 fi
8 if [ $a -lt 100 -a $b -gt 15 ]
9 then
10 echo "$a 小于 100 且 $b 大于 15 : 返回 true"
11 else
12 echo "$a 小于 100 且 $b 大于 15 : 返回 false"
13 fi
14 if [ $a -lt 100 -o $b -gt 100 ]
15 then
16 echo "$a 小于 100 或 $b 大于 100 : 返回 true"
17 else
18 echo "$a 小于 100 或 $b 大于 100 : 返回 false"
19 fi
20 if [ $a -lt 5 -o $b -gt 100 ]
21 then
22 echo "$a 小于 5 或 $b 大于 100 : 返回 true"
23 else
24 echo "$a 小于 5 或 $b 大于 100 : 返回 false"
25 fi
8.4、逻辑运算符
1 a=10
2 b=20
3
4 if [[ $a -lt 100 && $b -gt 100 ]];then
5 echo "返回 true"
6 else
7 echo "返回 false"
8 fi
9
10 if [[ $a -lt 100 || $b -gt 100 ]];then
11 echo "返回 true"
12 else
13 echo "返回 false"
14 fi
8.5、字符串运算符
1 a="abc"
2 b="efg"
3
4 if [ $a = $b ]
5 then
6 echo "$a = $b : a 等于 b"
7 else
8 echo "$a = $b: a 不等于 b"
9 fi
10 if [ $a != $b ]
11 then
12 echo "$a != $b : a 不等于 b"
13 else
14 echo "$a != $b: a 等于 b"
15 fi
16 if [ -z $a ]
17 then
18 echo "-z $a : 字符串长度为 0"
19 else
20 echo "-z $a : 字符串长度不为 0"
21 fi
22 if [ -n "$a" ]
23 then
24 echo "-n $a : 字符串长度不为 0"
25 else
26 echo "-n $a : 字符串长度为 0"
27 fi
28 if [ $a ]
29 then
30 echo "$a : 字符串不为空"
31 else
32 echo "$a : 字符串为空"
33 fi
8.6、文件测试运算符
9、echo 命令
9.1、输出普通字符串
echo "It is a test"
结果:It is a test
9.2、显示转义字符
echo "\"It is a test\""
结果:"It is a test"
9.3、显示变量
#!/bin/sh
read name
echo "$name It is a test"
结果:
OK #标准输入
OK It is a test #输出
9.4、显示换行
echo -e "OK! \n" # -e 开启转义
echo "It is a test"
结果:
OK!
It is a test
9.5、显示结果保存到文件
echo "It is a test" > myfile
9.6、显示命令字符对应的结果
echo `date`
注意: 这里使用的是反引号 `, 而不是单引号 '。
结果将显示当前日期
2020年 7月28日 星期二 15时05分27秒 CST