http://c.biancheng.net/cpp/view/6998.html
一.基础
- 打印:echo
- 执行一个文件test.sh
- 方法1:./test.sh 注意必须加点,不然会去系统PATH中找test.sh脚本,一般找不到的。/bin/sh这种目录
- 方法2: /bin/sh test.sh,文件中不用写#!/bin/sh
- 简单事例:从stdin读入一个值,赋给变量PERSON,并打印在屏幕上
#!/bin/sh echo "what is your name" read PERSON echo "hell $PERSON"
4.
-
变量:
-
shell中变量不需要声明类型,都是字符串类型;解释性语言基本都不需要,如python
-
变量的定义:数字字母下划线;数字不开头;跟系统变量命名不冲突;
-
name=liuxuyan
-
name='liuxuyan nihao'
-
name="liuxuyan nihao "
-
注:单引号双引号作用不同;有空格或者tab必须有引号;等号与变量之间不能有空格
-
-
打印 echo $name或者echo ${name}
-
4. 单双引区别:单引号本来是啥就是啥;双引号会识别反斜线,$符号
name=ceshi
echo 'nihao $name'
nihao $name
echo "nihao $name"
nihao ceshi
5. 命令结果赋值:name=$(cat ceshi.sh),命令结果赋给一个变量
6.删除:unset 变量名;只读变量:readonly 变量名
5. 特殊字符
echo "文件名 $0"
echo "第一个参数 $1"
echo "参数总个数 $#"
echo "所有参数 $*"
echo "进程id $$"
./test$.sh
第一个参数 a
参数个数 4
所有参数 a b c d
进程id 61849
6. 运算符
- 逻辑运算:必须用``引起来;运算符必须跟变量之间有空格 $a + $b;乘号必须有反斜线
a=10 b=20 c=`expr $a + $b` echo "a + b : $c" c=`expr $a \* $b` echo "a * b : $c" c=`expr $a / $b ` echo "a / b : $c" c=`expr $a % $b` echo "a % b : c" if [ $a == $b ] then echo "a is equal b" fi
a + b : 30 a * b : 200 a / b : 0 a % b : c
- 关系运算符:只支持数字
运算符 说明 举例 -eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 true。 -ne 检测两个数是否相等,不相等返回 true。 [ $a -ne $b ] 返回 true。 -gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。 -lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。 -ge 检测左边的数是否大等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。 -le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。 - 布尔运算符
运算符 说明 举例 ! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。 -o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。 -a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。