bash学习
一 shell区别及运行方法
shell一般指 shell script脚本;而广义是指shell终端是和操作系统沟通的桥梁,一般有Bsh和Bash.
运行方法:
- 按可执行程序执行:先编写脚本文件filename.sh(以#!/bin/sh作为首行,说明后面的按该shell执行);然后用chmode -x filename.sh修改成可执行权限;然后以./finename.sh来执行
- 直接执行:./bin/sh filename.sh来执行。当然此时文件不需要以#!/bin/sh作为首行.
2种注释:
- 单行注释:#
- 多行注释:其中的2个/可以换成其它字符
:<</ /
二 变量;
- 由字母数字下划线组成,变量名与=号之间无空格
- 变量使用:${var}
- 数组 arry={val1 var2 var3)
- 数组的调用${arry[n]} ,整个数组${arry[@]},数组元素的个数${#arry[@]}
- 字符串:单引号中不能集合变量;双引号可以。字符串长度 str="abcd" len=${#str};同时可以切片求子串或查找字符 ab==${str:0:2}
- 删除变量 unset var
三 变量传递:
在.sh脚本中用$n来接收传递的参数,一般第一个参数$0一般是文件本身,其它参数从1开始。在终端中直接按 ./filename.sh para1 para2 ....来传递参数。
参数的总个数$#来表示。所有的参数的表示$*或者$@前者等于把所有的参数作为一个字符串;而后者则将每一个参数作为一个字符串。
【】中间可以对参数进行一些比较和判断。前后都要有空格
四 运算:
表达式:`expr $a \* $b` ,注意expr后的字符时esc键下面的的字符不是单引号。乘号*前需要加\
关系运算符:-eq -ne ;-ge -lt; -ge -le;
布尔运算符:-a,-o,!
逻辑运算符:&&,||
字符串运算符:=,!=; -z /-n/$分别代表长度为0,不为0,字符串为空
温控按摩测试运算符;
五 其它命令:
echo str >>filename.sh #输出到文件。
read var:#从标准输入中读取一行给shell变量var
printf format-string [arguments...]
test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试.
let:
grep :是从给定字符串中寻找匹配内容的命令.如echo "Hello World !" | grep -e Hello echo $? #结果为Hello World ! 0#成功在hello word!中找到匹配的hello字符串
六流程控制:
5.1分支结构:
f condition1 then command1 elif condition2 then command2 else commandN fi
5.2 多分支选择:
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; *)#类似于defualut break/continu #跳出循环的2种类似C的方法 ;; esac
5.3 循环结构:
1 #for循环 2 for var in item1 item2 ... itemN 3 do 4 command1 5 command2 6 ... 7 commandN 8 done 9 10 11 #while循环 12 while condition 13 do 14 command 15 done 16 17 #until循环 18 until condition 19 do 20 command 21 done 22 23 #超级循环的几种格式: 24 while : 25 #while true 26 do 27 command 28 done 29 30 for (( ; ; ))
六 函数:与C大致相同,不同的是
- 函数调用时不需要加()
- 函数的参数传递:实参直接逐个写,程序里面用$n来或者对应参数。
- 函数的返回值:$? #需要注意的是这需要在函数调用后直接来用,不能跨函数使用;和 C 语言不同,shell 语言中 0 代表 true,0 以外的值代表 false。
七 重定向:标准输入、标准输出,错误输出,
command >file:(覆盖方式)重定向输入到file中;command >>file:(追加末尾方式)重定向输入到file中。
/dev/null 文件:当重定向到这里时,相当于禁止输出。因为写进去的内容被丢弃,读时啥也读不到。
八文件的包含:
. filename # 注意点号(.)和文件名中间有一空格 或 source filename