http://wiki.jikexueyuan.com/project/shell-tutorial/ 极客学院shell教程
一、shell定义:
Shell本身是一个用 C 语言编写的程序,它是用户使用 Unix/Linux 的桥梁,用户的大部分工作都是通过 Shell 完成的。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
用户直接面对的不是计算机硬件而是shell。用户将指令告诉shell,然后shell传输给系统内核。接着内核支配计算机硬件。
我们在Linux中输入命令的界面就成为shell。
二、shell脚本知识
2.1、开头#!/bin/sh
#!/bin/sh是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面跟的是此解释此脚本的shell的路径。
$ cat /etc/shells可以查看系统支持的shell格式
其实第一句的#!是对脚本的解释器程序路径,脚本的内容是由解释器解释的,我们可以用各种各样的解释器来写对应的脚本。
比如说/bin/csh脚本,/bin/perl脚本,/bin/awk脚本,/bin/sed脚本,甚至/bin/echo等等。
#!/bin/bash同理。
2.1变量
2.1.1普通变量(关闭shell后或切换shell后失效)
abc=123 //定义变量 echo $abc //读取变量 unset abc //取消变量2.1.2环境变量:系统预定义的参数
临时的:export 变量名=值。
变量在关闭shell时失效。切换shell也生效。(sh :切换shell exit:退出)
su 用户;切换用户,但是shell还是之前那个shell,临时环境变量还存在
su -用户:真正意义的切换用户,切换了用户的shell。临时环境变量就不存在了。
2.1.3位置变量
三、运算符
文件测试运算符:
检测 Unix 文件的各种属性。
字符串运算符:
布尔运算符:
关系运算符:
只支持数字,不支持字符串,除非字符串的值是数字。常见的有:
算数运算符:
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr. 下面使用expr进行; expr是一款表达式计算工具,使用它可以完成表达式的求值操作;
比如:
a=10 b=20 expr $a + $b expr $a - $b expr $a \* $b expr $a / $b expr $a % $b a=$b注意: 1. 在expr中的乖号为:\*
2. 在 expr中的 表达式与运算符之间要有空格,否则错误;
3. 在[ $a == $b ]与[ $a != $b ]中,要需要在方括号与变量以及变量与运算符之间也需要有括号, 否则为错误的。(亲测过)
四、shell脚本语法
4.1case语法
#! /bin/bash echo "please input a number (1-4)" read num echo "your input number is $num" case "$num" in 1) echo "one" ;; 2) echo "two" ;; 3|4) echo "three or four" ;; *) echo please input 1 -4 ;; //每个case语句都以;;结尾 esac //以esac结尾4.2、if语法
#! /bin/bash echo "please input a director judge if is" read a echo "director is $a" if [ ! -d /usr/aaaaaaaaaaaaaaa ];then //路径也可以直接用$a mkdir -p /usr/aaaaaaaaaaaaaaaa elif [条件2];then 执行语句。。。 else 执行语句。。。 fi #1 /bin/bash read -p "请输入你的成绩:" a if [ $a -ge 90 ] && [ $a -le 100 ];then echo "您成绩很棒棒哦" elif [ $a -ge 70 ] && [ $a -le 89 ];then echo "你成绩一般般鸭" else echo "你个垃圾" fi4.3、for循环(两种)
#! /bin/bash for ((i=0;i<10;i++)) do sum=$((sum+i)) echo $sum done #!/bin/bash for a in {1,1,1,1,1,11,} do echo $a done4.4 while和util循环
COUNTER=0 while [ "$COUNTER" -lt 5 ] //while为条件为true时执行。util反之 do COUNTER=$((COUNTER+1)) echo $COUNTER done