懒人少语之第七周
1 🚀🚀🚀实例🚀🚀🚀
2
3 #!/bin/bash
4 a=0
5 until [ ! $a -lt 10 ];do `当只有判断为假的时候进入循环`
6 echo $a
7 a=`expr $a + 1`
8 done
9
10 🚀your_name="fun" `定义变量时,变量名不使用美元符号($,PHP语言中变量需要)`
11 首个字符必须为字母(a-z,A-Z)。
12 中间不能有空格,可以使用下划线(_)。
13 不能使用标点符号。
14 不能使用bash里的关键字(可用help命令查看保留关键字)。
15
16 🚀for file in `ls /etc` `除了显式地直接赋值,还可以用语句给变量赋值`
17 以上语句将 /etc 下目录的文件名循环出来
18
19 🚀your_name="Ltb" `只要在变量名前面加美元符号即可`
20 echo $your_name
21 echo ${your_name}
22 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
23 for skill in Ada Coffe Action Java; do
24 echo "I am good at ${skill}Script"
25 done
26 如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。
27
28 🚀your_name="tom" `已定义的变量,可以被重新定义`
29 echo $your_name
30 your_name="alibaba"
31 echo $your_name
32 只有使用变量的时候才加美元符($)
33
34 🚀#!/bin/bash `使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变`
35 MyUrl="http://tcpip.top"
36 readonly MyUrl
37 MyUrl="http://tcpip.top"
38 结果如下:
39 /bin/sh: NAME: This variable is read only.
40
41 🚀unset variable_name `使用unset命令可删除变量`
42 变量被删除后不能再次使用,unset命令不能删除只读变量。
43 #!/bin/bash
44 MyUrl="http://tcpip.top"
45 unset MyUrl
46 echo $MyUrl
47 以上实例执行将没有任何输出
48
49 🚀变量类型 `本地变量/环境变量/局部变量/位置变量/特殊变量`
50 1. `本地变量` 仅在当前shell进程有效,长时间在当前shell当中累积的变量越多,越占内存.unset
51 2. `环境变量` 所有程序,包括shell启动的程序,子程序,都能访问环境变量,
52 有些程序需要环境变量来保证其正常运行. 必要的时候shell脚本也可以定义环境变量
53 3. `局部变量` 限定在脚本或命令中定义,仅在当前shell实例有效,退出脚本或其它shell启动程序不能访问局部变量.
54 4. `位置变量` 通常是$0 $1 $2.. $* $@ 等表示.
55 5. `特殊变量` $0 $* $@ $$ $! $? $- 包含其他字符的变量有特殊含义,这样的变量被称为特殊变量
56
57 🚀字符串 `常用数字和字符串类型,可用单引号/双引号/不用引号等方式表示`
58 单引号字符串限制:
59 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
60 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
61 双引号
62 Your_Name='ltb'
63 str="Hello,this is \"$ltb\"! \n"
64 双引号里可以有变量
65 双引号里可以出现转义字符
66
67 🚀多个字符串连接
68 Your_Name="ltb"
69 Num="hello, "$ltb" !"
70 Num_1="hello, ${ltb} !"
71 echo $Num $nUM_1
72
73 🚀获取字符串长度
74 string="Chinese"
75 echo ${#string}
76 #输出 7
77 echo $expr length "$string"
78
79 🚀提取字符串
80 以下实例从字符串第 4 个字符开始截取 2 个字符:
81 string="tcpip is a great site"
82 echo ${string:4:2}
83 #输出 ip
84
85 🚀查找字符串
86 查找字符"s" 的位置:
87 string="tcpip is a great company"
88 echo `expr index "$string" s`
89 # 输出 8
90
91 🚀定义数组
92 Array_Name=(value0 value1 value2 value3)
93 Array_Name2=(
94 value0
95 value1
96 value2
97 value3
98 )
99 还可以单独定义数组
100 array_name[0]=value0
101 array_name[1]=value1
102 array_name[n]=valuen
103 可以不使用连续的下标,而且下标的范围没有限制
104
105 🚀读取数组
106 valuen=${array_name[n]}
107 valuen=${array_name[@]} `@符号可获取数组中所有元素`
108
109 🚀获取数组长度
110 获取数组长度的方法与获取字符串长度方法相同,例如:
111 length=${#Array_Name[@]} `取得数组元素的个数`
112 length=${#Array_Name[*]}
113 lengthx=${#Array_Name2[n]} `取得数组单个元素的长度`
114
115 🚀Shell注释
116 以"#"开头的行就是注释,会被解释器忽略
117 #!/bin/bash
118 # ----------------+---------------------------------------+
119 # * Author : Name
120 # * Email : x@vip.qq.com
121 # * Create time : 2017-08-20 18:03
122 # * Last modified : 2017-08-20 18:03
123 # * Filename : test33.sh
124 # * Description :
125 # ----------------+---------------------------------------+
126 每一行加个#符号太费力了,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,
127 没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果