Shell简介:
Shell是一个命令解释器,也可以看做为一种系统软件,提供了用户与内核之间进行交互的一种通道,它解释由用户输入的命令并且把它们送到内核去执行,执行效率高。
1 #!/bin/bash 2 3 # 第一个脚本 4 # chmod +x ./test.sh 使脚本具有执行权限 5 # ./test.sh 在当前目录下执行脚本 6 # /bin/sh test.sh 指定解释器,执行脚本 7 8 #echo "hello World!" 9 10 11 #----------------------------------------------# 12 # 第二个脚本 13 # 声明变量、给变量赋值、声明变量为只读类型 14 your_name="zhoufei" 15 echo $your_name 16 echo ${your_name} 17 18 your_name="google" 19 echo ${your_name} 20 21 #readonly your_name 22 your_name="声明为只读变量" 23 24 # 字符串 25 # ''输出纯字符串,有变量也失效 26 # ""里面可以包含变量 27 your_name2='baidu' 28 str="hello I know your are "${your_name2}" ! " 29 echo ${str} 30 31 # 字符串拼接 32 your_name3="baidu3" 33 greeting="I like "${your_name3}"! ---" 34 greeting2="I like "$your_name3" ! " 35 echo ${greeting} ${greeting2} 36 37 # 字符串长度 38 echo "${your_name3} 长度是:${#your_name3}" 39 40 # 子字符串 41 your_name4='获取这个字符串的后三位' 42 echo ${your_name4:8:3} 43 44 # 查找子字符串 45 your_name5="runoob is a great company" 46 #echo `expr index "${your_name5}" is` 47 48 # 数组 49 echo "----------数组---------" 50 array_name=(name1 name2 name3) 51 echo "这是一个数组-${array_name[@]}" 52 array_name[3]='name4' 53 echo "这是一个数组-${array_name[@]}" 54 echo "数组的长度:${#array_name[@]}" 55 echo "数组中第0个元素的长度:${#array_name[0]}" 56 57 # Shell传递参数 $n 58 echo "----------Shell传递参数---------" 59 echo 'Shell传递参数验证如下:' 60 echo "文件名:$0" 61 echo "第一个参数:$1" 62 echo "第二个参数:$2" 63 echo "脚本执行的进程ID号:$$" 64 65 # Shell运算符 66 # expr 是一个计算工具,完成表达式的求值操作 67 val1=`expr 1 + 1` 68 echo "expr 运算符的执行结果是$val1" 69 70 # 算术运算符 71 echo "----------算术运算符---------" 72 a=10 73 b=20 74 val2=`expr $a + $b` 75 val3=`expr $a - $b` 76 val4=`expr $a * $b` 77 val5=`expr $a / $b` 78 val6=`expr $a % $b` 79 echo "a + b : $val2" 80 echo "a - b : $val3" 81 echo "a * b : $val4" 82 echo "a / b : $val5" 83 echo "a % b : $val6" 84 if [ $a == $b ]; then 85 echo "a 等于 b" 86 fi 87 if [ $a != $b ]; then 88 echo "a 不等于 b" 89 fi 90 91 # 关系运算符 92 echo "----------关系运算符---------" 93 if [[ $a -eq $b ]]; then 94 echo "a 等于 b" 95 fi 96 if [[ $a -ne $b ]]; then 97 echo "a 不等于 b" 98 fi 99 if [[ $a -gt $b ]]; then 100 echo "a 大于 b" 101 fi 102 if [[ $a -lt $b ]]; then 103 echo "a 小于 b" 104 fi 105 if [[ $a -ge $b ]]; then 106 echo "a 大于等于 b" 107 fi 108 if [[ $a -le $b ]]; then 109 echo "a 小于等于 b" 110 fi 111 112 # 布尔运算符 !、-o、-a 113 echo "----------布尔运算符---------" 114 if [[ $a != $b ]]; then 115 echo "a 不等于 b" 116 fi 117 if [ $a -lt $b -o $a -eq $b ]; then 118 echo "a 大于等于 b" 119 fi 120 if [ $a -gt 1 -a $b -lt 10 ]; then 121 echo "a > 1 并且 b < 10" 122 else 123 echo "a > 1 并且 b < 10 是错误的!" 124 fi 125 126 # 逻辑运算符 && || 127 echo "----------逻辑运算符---------" 128 if [[ $a -gt 1 && $a -lt 100 ]]; then 129 echo "a 大于1 并且 a 小于100 成立" 130 else 131 echo "a 大于1 并且 a 小于100 不成立" 132 fi 133 if [[ $a -le 10 || $a -gt 100 ]]; then 134 echo 'a 小于等于10 或者 a 大于 100 有一个成立' 135 else 136 echo 'a 小于等于10 或者 a 大于 100 都不成立' 137 fi 138 139 # 字符串运算符 140 echo "----------字符串运算符---------" 141 string1='string1' 142 string2='string2' 143 if [[ $string2 = $string1 ]]; then 144 echo "string1 等于 string2" 145 else 146 echo "string1 不等于 string2" 147 fi 148 if [[ $string2 != $string1 ]]; then 149 echo "string2 不等于 string1" 150 fi 151 if [[ -z $string1 ]]; then 152 echo "string1 长度是:0" 153 fi 154 if [[ -n $string1 ]]; then 155 echo "string1 长度不是:0" 156 fi 157 if [[ $string1 ]]; then 158 echo "string1 不为nil" 159 fi 160 161 # 文件测试运算符 162 echo "----------文件测试运算符---------" 163 file1='假如为:文件' 164 file2='假如为:文件夹' 165 if [[ -d $file2 ]]; then 166 echo '检测文件为文件夹' 167 fi 168 if [[ -f $file1 ]]; then 169 echo '检测文件为普通文件' 170 fi 171 if [[ -s $file1 ]]; then 172 echo '检测文件为空' 173 fi 174 if [[ -e $file1 ]]; then 175 echo '检测文件为存在的' 176 fi 177 178 # echo命令 179 echo "----------echo命令---------" 180 echo "It is a test" 181 echo ""It is a test"" 182 echo "下面换行 " 183 echo -e "下面不换行 c" # -e 开启转义 c 不换行 184 echo "字符串重定向到文件中" > myfile 185 echo '字符串原样输出 $a' 186 echo `date` #显示执行结果 187 188 # printf命令 189 # printf format-string [arguments...] 190 # %s %c %d %f都是格式替代符 191 # %-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。 192 # %-4.2f 指格式化为小数,其中.2指保留2位小数。 193 # 换行 回车 194 echo "----------printf命令---------" 195 echo 'Hello, Shell,能够自动换行' 196 printf "Hello, Shell,不能自动换行,需要手动加换行符 " 197 printf "%-10s %-8s %-4s " 姓名 性别 体重 198 printf "%-10s %-8s %-4.2f " 郭靖 男 66.12345 199 printf "%-10s %-8s %-4.2f " 杨过 男 77.12345 200 201 # test命令 202 # Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。 203 echo "----------test命令---------" 204 test1=100 205 test2=101 206 testString1='testString1' 207 testString2='testString2' 208 if test $test1 -lt $test2 ; then 209 printf "%s " test1小于test2 210 fi 211 if test -z testString1 ; then 212 printf "testString1长度为0" 213 else 214 printf "testString1长度不为0 ,:%s " testString1 215 fi 216 if test -e ./test1.sh ; then 217 printf "文件名:test1.sh 存在 " 218 else 219 printf "文件名:test1.sh 不存在 " 220 fi 221 222 # Shell流程控制 223 echo "----------Shell流程控制---------" 224 # if else-if else 225 if [[ $a == $b ]]; then 226 echo "a 等于 b" 227 elif [[ $a -gt $b ]]; then 228 echo "a 大于 b" 229 elif [[ $a -lt $b ]]; then 230 echo "a 小于 b" 231 else 232 echo "没有符合条件的" 233 fi 234 num1=$[2*3] 235 num2=$[1+5] 236 if test $num1 -eq $num2 ; then 237 echo "num2 等于 num1" 238 else 239 echo "num1 不等于 num2" 240 fi 241 # for 循环 242 for loop in 1 2 3 4 5 6; do 243 # echo "当前输入的值是:$loop" 244 printf "当前输入的值是:%s " $loop 245 done 246 for string in 'This is a String!'; do 247 echo "$string" 248 done 249 # while 语句 250 # let 命令,它用于执行一个或多个表达式 251 ignore0(){ 252 count=1; 253 while [[ $count -lt 10 ]]; do 254 echo "while 执行结果:$count" 255 let "count++" 256 done 257 echo '按下 <CTRL-D> 退出' 258 echo -n '输入你最喜欢的电影名: ' 259 while read Film ; do 260 echo "是的! $Film 是一部好电影!" 261 done 262 } 263 #ignore0 264 ignore1(){ 265 while true: 266 do 267 echo "无限循环!" 268 done 269 until false ; do 270 echo "无限循环!" 271 done 272 } 273 #ignore1 274 # case语句 275 ignore2(){ 276 echo '请输入1到4之间的数字' 277 echo '你输入的数字是:' 278 read aNum 279 case $aNum in 280 1 ) 281 echo "输入的数字为:$aNum" 282 ;; 283 2 ) 284 echo "输入的数字为:$aNum" 285 ;; 286 3 ) 287 echo "输入的数字为:$aNum" 288 ;; 289 4 ) 290 echo "输入的数字为:$aNum" 291 ;; 292 * ) 293 echo "你输入的数字不在1-4之间" 294 ;; 295 esac 296 } 297 #ignore2 298 # break命令 299 ignore3(){ 300 while true 301 do 302 echo '输入1-5之间的数据' 303 read aNum 304 case $aNum in 305 1|2|3|4|5 ) 306 echo "输入的数字为:$aNum" 307 ;; 308 * ) 309 echo "你输入的数字不在1-4之间" 310 break 311 #continue 312 echo "游戏结束" 313 314 esac 315 done 316 } 317 #ignore3 318 # Shell 函数 319 echo "----------Shell 函数---------" 320 demoFunc(){ 321 echo '这是第一个函数' 322 } 323 echo '第一个函数开始' 324 demoFunc 325 echo '第一个函数结束' 326 funWithReture(){ 327 echo '这个函数会对输入的参数进行加法运行...' 328 echo '输入第一个参数:' 329 read para1 330 echo '输入第二个参数:' 331 read para2 332 echo "两次输入的参数分别是:$para1---$para2" 333 return $(($para1+$para2)) 334 } 335 funWithReture 336 echo "输入的数字之和为:$?" 337 338 # Shell 输入/输出重定向 339 echo "----------Shell 输入/输出重定向---------" 340 date >> myfile 341 cat myfile 342 wc -l << EOF 343 标题 344 测试 Head Document 类型 345 的追加重定向命令 346 EOF 347 ls > myfile 2>&1 348 ls > /dev/null 2>&1 349 350 # Shell 文件包含 351 echo "----------Shell 文件包含---------" 352 source ./test2.sh 353 echo "引用外部的test2.sh文件中的url变量,URL变量为:$url"