- 一般以.sh文件后缀来代表某个文件是个脚本文件脚本文件是文本文件,所以不能直接执行,所以需要解释器,目前最好用的解释器之一bashjava语言是跨平台的,.java--->.class, .class文件通过java虚拟机来解释执行java虚拟机:其实就相当于main.exe一个可执行文件,专门来解释执行.class的java相对于C/C++效率低的原因,因为C/C++可以直接产生.exe文件执行,java必须借助java虚拟机来执行。解释型与编译型的区别(面试):解释型需要解释器
- 脚本文件第一行以 #!开头,后边解释器的路径,不写的话用的是系统默认的,eg:#!usr/bin/bash脚本文件中单独的一行开头为#代表屏蔽执行的时候命令 eg:/usr/bin/bash my.sh 这句执行代表的意思是启动bash这个解释器(程序),将my.sh当参数传进去。 但是通常会直接说执行这个脚本如果直接 ./my.sh 是会出错的,因为my.sh 并没有执行权限,如果先通过chmod命令将它改变成可执行文件,就可以执行。具体的过程是:执行这个文件时,看到#!开头,知道它是一个脚本文件,后边指定了它的解释器,就启动解释器去执行
#!/usr/bin/bash #脚本语言的变量是让一个变量名指向一块空间,C语言的变量定义时候将它与一块空间关联起来 #脚本没有类型之说,只能说str是一个变量 #变量赋值时等号左右边不能有空格,比较字符串才有空格 str="wang" val=123 #打印命令echo,底下代表打印这个字符串,变量前边加$代表取val这个变量的值 echo $str echo str echo $val #底下打印出的值与上边并没有区别,加双引用并不改变,加单引号会按字符串输出 echo "str" echo "val = $val" #从键盘获取数据,read+变量名 read a exit 0环境变量
#!/usr/bin/bash #环境变量:在父进程中定义,继承过来使用的 #自己没用定义的,但是可以直接使用 echo "PATH=&PATH" #$0 shell脚本的名字 #$# 传递给脚本的参数个数 #$PSI 输入命令提示符 #$$shell脚本的进程号 exit 0参数变量
#!/usr/bin/bash #为转义字符 #环境变量,$1为传给脚本的第一个参数,$2为传给脚本的第二个参数,以此类推 echo "$1=$1" echo "$2=$2" echo "$3=$3" #一般有以下的用法 name=$1 passwd=$2 echo "name = $name,passwd = $passwd" exit 02.条件
#!/usr/bin/bash
#比较命令test,满足执行then,fi代表条件判断结束
#字符串比较
echo "input"
read a
if test "hello" = "$a"
then
echo "=="
fi
#第二种方式
if [ "hello" = "$a" ]
then
echo "=="
fi
#满足条件与不满足条件都有输出
#算数比较,判读是否大于-gt,判断是否大于等于-ge
if [ "$a" -gt 10 ]
then
echo "$a > 10"
else
echo "$a <= 10"
fi
#文件条件测试
#判读是否为目录文件-d+文件名,判读是否为普通文件-f+文件名
if [ -d "$a" ]
then
echo "$a is dirent"
elif [ -f "$a ]
then
echo "$a is file"
else
echo "$a not exist"
fi
i=0
#让变量自增
let "i+=1"
#expr表示执行算数运算符
i=`expr $i + 1`
echo "i=$i"
#如果要执行将ls这个命令,得加个括号,不然ls就是一个普通的变量,其他命令也是如此
str=$(ls)
echo "str=$str"
exit 0
3.循环
#循环有3中
#1.for循环,一般用于有限个值的操作
for filename in $(ls)
do
echo "$filename"
sleep 1
done
#2.while循环
#while condition do states
#done
#while [ : ] 死循环
while [ "1" == "1" ]
do
echo "run"
sleep 1
done
#3.until循环,当condition不成立时循环,知道检测到一个东西的时候停止
#until condition do statements done
exit 0
四、脚本的优点
脚本的开发速度快对性能没有要求一般用脚本做脚本快的原因是通过执行一些命令去完成功能



