shell编程
反引号 -命令 也不用,直接写也行
-
优点可以快速的编程,直接去掉已有的命令
缺点:效率不高
-
解释型,需要解释器执行,就像音乐播放器 开发效率高,执行效率低
编译型,需要编译链接 生产二进制可执行程序(指令) 开发效率低,执行效率高
-
一般以.sh为结尾,但不这么干也行,但一般都是这样,为了便于知道是个shell程序
#!/usr/bin/bash //#!后面跟解释器
echo "hello shell" #打印 需要隔一个空格
exit 0
- 运行,一般将其设为可执行文件,然后直接运行
1.变量
在shell中没有类型
本地变量
#!/usr/bin/bash
#echo "hello world" #代表注释
#本地变量:从键盘获取或者常量
#这个值是相当于引用技术,变量是一个指针指向存储在一个数据区
#而且没有类型一说,你可以当作任何类型,只不过用的时候用相应的命令
str="hello" # =前后不能有空格
str=hello #有没有""都无所谓
str=hello world #但是这就不可以了 因为有空格来间隔,只会显示hello
str="hello world" #这时需要加上""以表示一个整体
var=100 #这也是有没有""都无所谓,当做什么就用对应的命令就行了
echo "$var" #会取var的值
echo '$var' #单引号会强制看成一个字符串
#赋值
s=$str
echo "s=$s" #双引号最好加上,因为可以有一些运算符之类的
#算数运算:好像expr只能弄成表达式不能赋值,而let直接跟算数运算一样
let "var += 1"
var=`expr $var +1`
var=`expr $var \* 3` #*需转义
let "var*=200" #这个好像就不用了
echo "var=$var"
#从键盘获取
read line #相当于从键盘获取字符,给line
echo "line=$line"
exit 0
环境变量
从父进程中继承过来的
PATH #可执行文件执行的路径
#!/usr/bin/bash
echo "\$#=$#" #传递给脚本的参数个数
echo "\$$=$$" #脚本进程号
echo "\$0=$0" #该脚本的名字
echo "\$1=$1" #该脚本传的第一个参数
echo "\$1=$2" #该脚本传的第二个参数
2.条件
#if语句示例1
if [ 3 -lt 5 ] #注意这个空格是有严格要求的,少了不行,多了不好看
then #注意不论是if还是elif后面都要跟then
echo "3>5"
else
echo "3<5"
fi #结尾要跟fi以示结束标志
#if语句示例2
a=10
read b
if [ $a -gt $b ]
then
echo "a > b"
elif [ $a -lt $b ]
then
echo "a < b"
else
echo "a = b"
fi
#if语句示例3:可以用&& ||之类的逻辑运算符
a=10
read b
if [ $a -gt $b ] || [ $a -lt $b ] #这里当然只是为了演示
then
echo "a ! b"
else
echo "a = b"
fi
#!/usr/bin/bash
echo "input"
read line
case $line in
yes | y) echo "this is yes";;
no | n) echo "this is no";;
* ) echo "this is other"
esac
echo "input"
read line
case $line in
[Yy]|[Ee]|[Ss]) echo "this is yes";;#各种组合Yes YEs Y Ye
[Nn]|[Oo]) echo "this is no";;
* ) echo "this is other"
esac
3.循环
#!/usr/bin/bash
for i in 1 2 3
do
echo "i=$i"
done
str=`ls` #告诉ls是一个命令
#str=$(ls)
for i in $str
do
echo "i=$i"
done
#也可以像C语言的格式一样
for ((i=0;i<6;++i))
do
echo "i=$i"
done
#!/usr/bin/bash
i=0
while [ $i -lt 10 ]
do
echo "i=$i"
let "i+=1"
done
#0 1 2 .. 9
没满足就执行,直到条件满足才停下来
#!/usr/bin/bash
i=0
until [ $i -gt 10 ]
do
echo "i=$i"
let "i+=1"
done
#0 1 2 .. 10
4.函数
#!/usr/bin/bash
fun()
{
$# #为传参个数
$1 #为传入的第一个参数
$2 #为传入的第二个参数
...
unset 变量名 #将该变量从解释器中移除
}
fun a b c #这样去调用
a=$? #指的是上一行的执行结果,可以拿这种方式来取返回值,但运行第二次就不行了,因为取得是上一行的执行结果
#但这不像C直接可以通过变量名来取值,只有解释器不消失,该变量就不会消失