一、简介
shell是Unix和linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。(交互式和批处理式)作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支
二、shell解释器
bash、sh、csh、ksh(脚本编程语言的例子有awk、Perl、Python、Ruby与Shell)
更高级,是别的语言的N倍
三、执行shell脚本
3.1 作为可执行程序
./test.sh
3.2作为解释器参数
直接运行解释器,其参数就是shell脚本的文件名
/bin/sh test.sh /bin/php test.php 如:
- echo "What is your name?"
- read PERSON
- echo "Hello, $PERSON"
- /
chmod +x ./test.sh $./test.sh What is your name? mozhiyan Hello, mozhiyan 四、变量 4.1定义变量 a="123" 4.2使用变量 echo $a 或 ${a} 4.3变量可重新赋值 4.4变量可以为readonly或unset
五、特殊变量
六、变量替换
6.1
- a=10
- echo -e "Value of a is $a \n"
6.2
6.3 命令替换
注意是反引号,不是单引号,这个键位于 Esc 键下方。
七、运算
包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
- #!/bin/bash
- val=`expr 2 + 2`
- echo "Total value : $val"
八、注释
以“#”开头的行就是注释,会被解释器忽略。
多行注释可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果。
九、字符串
9.1拼接字符串
- your_name="qinjx"
- greeting="hello, "$your_name" !"
- greeting_1="hello, ${your_name} !"
9.2获取字符串长度
echo ${#string} 9.3提取字符串 echo ${string:1:4} 9.4查找字符串 echo `expr index "$string" is`
十、数组
10.1定义数组
用括号来表示数组,数组元素用“空格”符号分割开
- array_name=(value0 value1 value2 value3)
10.2读取数组
- valuen=${array_name[2]}
10.3获取数组长度
- # 取得数组元素的个数
- length=${#array_name[@]}
- # 或者
- length=${#array_name[*]}
- # 取得数组单个元素的长度
- lengthn=${#array_name[n]}
十一、echo
在屏幕上打印字符串
11.1输出至文件
echo "It is a test" > myfile 11.2显示命令执行结果 echo `date`
十二、printf
格式化输出,是echo的增强版
十三、if else
if [ expression 1 ] then Statement(s) to be executed if expression 1 is true elif [ expression 2 ] then Statement(s) to be executed if expression 2 is true elif [ expression 3 ] then Statement(s) to be executed if expression 3 is true else Statement(s) to be executed if no expression is true fi 十四、case esac
- read aNum
- case $aNum in
- 1) echo 'You select 1'
- ;;
- 2) echo 'You select 2'
- ;;
- 3) echo 'You select 3'
- ;;
- 4) echo 'You select 4'
- ;;
- *) echo 'You do not select a number between 1 to 4'
- ;;
- esac
十五、for循环
- for str in 'This is a string'
- do
- echo $str
- done
十六、while循环
- COUNTER=0
- while [ $COUNTER -lt 5 ]
- do
- COUNTER='expr $COUNTER+1'
- echo $COUNTER
- done
十七、until循环
until command do Statement(s) to be executed until command is true done 十八、跳出循环 在嵌套循环中,break 命令后面还可以跟一个整数,表示跳出第几层循环 十九、函数 19.1函数可以有function也可以没有function 19.2返回字符串 可以先定义一个字符串 19.3删除函数 $unset .f function_name 19.4从终端调用函数 将函数定义在主目录下的 .profile 文件,这样每次登录后,在命令提示符后面输入函数名字就可以立即调用。
二十、输入输出重定向
20.1输出重定向
命令输出重定向
$ command > file 20.2输入重定向 command < file 二十一、文件包含
- . filename
或
- source filename
例如,创建两个脚本,一个是被调用脚本 subscript.sh,内容如下:
- #!/bin/bash
- . ./subscript.sh
- echo $url