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 "你个垃圾"
fi
4.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
done
4.4 while和util循环
COUNTER=0
while [ "$COUNTER" -lt 5 ] //while为条件为true时执行。util反之
do
COUNTER=$((COUNTER+1))
echo $COUNTER
done