shell脚本 基础应用

变量分为普通变量可只读变量

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
#普通变量
#!/bin/bash
name="chen" 
echo "${name}"
 
下面是执行结果
---------------------------
[root@localhost ~]# sh t1.sh
chen
 
 
#只读变量 只读变量就是只可以阅读,不可以进行二次修改
#!/bin/bash
name="chen"
readonly name
name="chenyiyuan"
 
下面是执行结果
------------------------------
[root@localhost ~]# sh t1.sh
t1.sh:行4: name: 只读变量
 
#删除变量
#!/bin/bash
name="chen"
unset name
echo "${name}"
 
下面是执行效果  执行效果为空
-------------------------------
[root@localhost ~]# sh t1.sh
 
:<<EOF
给变量命名的注意事项:
  1.命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
  2.中间不能有空格 不可以使用下划线
  3.不能使用标点符号
  4.不可以使用bash中的关键字
EOF
 
:<<EOF
变量的类型
 1.局部变量
 2.环境变量:
 可以自己定义环境变量
[root@localhost ~]# vim /etc/profile
 -----------------------
 export NAME="chen"
 -----------------------
[root@localhost ~]# source /etc/profile //执行这条命令之后才可以是环境变量生效,在任何的shell脚本中都可以使用
EOF

  特殊变量

特殊变量 含义
$$ Shell本身的PID(ProcessID)
$! Shell最后运行的后台Process的PID
$? 最后运行的命令的结束代码(返回值)
$- 使用Set命令设定的Flag一览
$* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$# 添加到Shell的参数个数
$0 Shell本身的文件名
$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
echo "shell的本身ID为: $$"
echo "执行的文件名为: $0"
echo "第一个参数为: $1"
echo "第二个参数为: $2"
echo "第三个参数为: $3"
echo "所有传递的参数个数为:  $#"
echo "所有传递的参数: $*  $@"
 
执行结果
-----------------------------------------
[root@localhost ~]# sh t1.sh 1 2 3
shell的本身ID为: 26861
执行的文件名为: t1.sh
第一个参数为: 1
第二个参数为: 2
第三个参数为: 3
所有传递的参数个数为:  3
所有传递的参数: 1 2 3  1 2 3
—————————————————————————————————————————

  

shell字符串

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
:<<EOF
单引号和双引号的区别:
 1.单引号中的任何字符都会以字符串的形式输出,所以如果变量是用单引号引起来的就是无效的变量
 #!/bin/bash
 name="chen"
 echo '${name}'
 
执行效果如下
-------------------------------
 [root@localhost ~]# sh t1.sh
 ${name}
-------------------------------
 2.双引号中可以有变量,而且可以有转义字的出现
 ----------------------------------
 #!/bin/bash
 name="chen"
 str="hello,my name is "$name" "
 echo -e ${str}  //-e可以识别转义字符
 -----------------------------------
 执行效果如下 可以看出换了一行
 -------------------------
 [root@localhost ~]# sh t1.sh
hello,my name is "chen"
 
EOF
 
获取字符串的长度
#!/bin/bash
name="chen"
echo ${#name} 
执行结果
------------------------------
[root@localhost ~]# sh t1.sh
4
------------------------------
 
提取字符串中的子字符串
#!/bin/bash
name="chen19990920"
echo ${name:4:5}  //冒号后面的第一个数字是字符串的下标,就是从哪里开始提取,后面的一个数字是要提取多少个字符
执行结果
---------------------------
[root@localhost ~]# sh t1.sh
19990
---------------------------
 
查找一个字符串中某个字符的个数
#!/bin/bash
name="chen19990920"
echo `expr index "${name}" 9`
 
执行结果
-------------------------------
[root@localhost ~]# sh t1.sh
 6
-------------------------------

  

shell算数运算符

1
:<<EOF

   +:对两个变量做加法。

   -:对两个变量做减法。

  *:对两个变量做乘法。 //需要加转义字符

  /:对两个变量做除法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
EOF<br><br>#!/bin/bash
a=10
b=2
echo `expr $a + $b`
echo `expr $a - $b`
echo `expr $a * $b`
echo `expr $a / $b
执行结果
------------------------------
[root@localhost ~]# sh t1.sh
12
8
20
5
-----------------------------<br>:<<EOF

    **:对两个变量做幂运算。

    %:取模运算,第一个变量除以第二个变量求余数。

   +=:加等于,在自身基础上加第二个变量。

   -=:减等于,在第一个变量的基础上减去第二个变量。

   *=:乘等于,在第一个变量的基础上乘以第二个变量。

   /=:除等于,在第一个变量的基础上除以第二个变量。

   %=:取模赋值,第一个变量对第二个变量取模运算,再赋值给第一个变量。

1
EOF

 

  

shell循环

 for循环

while循环

原文地址:https://www.cnblogs.com/Zrecret/p/11993485.html