懒人少语之第七周 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.. $* [email protected] 等表示. 55 5. `特殊变量` $0 $* [email protected] $$ $! $? $- 包含其他字符的变量有特殊含义,这样的变量被称为特殊变量 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 : [email protected] 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 没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果
时间: 2024-10-05 04:33:25