#!/usr/bin/bash echo "hello" exit 0
为脚本文件更改权限之后,加上执行权限,就可以当做可执行文件来执行,但是区别于.exe文件
C/C++ 编译型:xxx.c 编译生成二进制可执行程序,直接运行可执行程序(运行效率高,开发效率低)
shell 解释型:需要解释器,通过解释器解释执行(开发效率高,运行效率低)
当对性能不作要求的时候,我们使用解释型语言会更加高效 写的是一个脚本文件,但是运行的是一个解释器,通过解释器来解释脚本文件;脚本文件是文本文件,可执行程序是脚本解释器,将脚本程序当做参数,传给脚本解释器来进行运行.如果需要知道脚本文件执行时的进程号,实际上就是脚本解释器的进程号。 脚本编程的相关知识点 变量 本地变量在传统的C/C++等编译型语言当中,我们的变量和值的关系是每一个值和变量(地址空间结合),每一个变量都有一个固定的地址,但是在解释型语言中,当变量被赋予不同的值的时候,他的地址也会随之改变,不可将两种不同类型的语言相提并论(内存分布方面);解释型语言没有类型的区别
#! /usr/bin/bash str=hello val=99 mystr=$val#用val给mystr赋值 #井号为注释标准 #echo是输出,相当于printf #在赋值的时候加不加双引号是都可以的,且等号的两边不能有空格 #如果要原样输出,请使用单引号 #在键盘获取 echo ”input“ read line echo "line=$line" echo 'val=$val' echo “val=$val” echo “str=$str” exit 0环境变量
在当前环境中已经定义好的可以直接使用,例如 PATH
#!/usr/bin/bash echo "$PATH"#最常见环境变量,可执行程序存放的地点 echo "$PS1"#命令提示符 echo “$0=$0”#脚本的名字 echo "$#=$#"#传递给脚本的参数个数 echo "$$=$$"#shell脚本的进程号,脚本程序通常会用他来生成一个唯一的临时文件,如/tmp/tmpfile echo "$1=$1"#第一个参数 echo “$2=$2”#第二个参数,$后面跟的几就是第几个参数参数变量 条件 字符串
#! /usr/bin/bash echo "input" read line #判断字符串相等 等号两边有空格 if [ "$line" = "123" ] then echo "==" fi #判断是否为空 if [ -n "$line" ] then echo "值 $line" else echo "null" fi算数比较
#!/usr/bin/bash echo "input" read line if [ "$line" -lt 100 ] then echo "$line < 100" fi if [ "$line" -lt 0] || ["$line" -gt 100 ] then echo "成绩不合法" fi文件测试
#文件检查命令test -f,检查文件是否存在 if test -f fred.c#开始 then ... fi#结束
或者写成:
if [ -f fred.c ] then ... fi
#! /usr/bin/bash #检测文件是否存在 echo "input" read filename if [ -f "$filename" ] then echo "$filename 存在" else echo "$filename 不存在" fi #if test -f $filename #then echo a.py存在 #fi #查看文件类型 if [ -d "$filename" ] then echo "$fielname 是一个文件夹" else [ -f $filename ] echo "$filename 是普通文件" else echo "$fielname 不存在" fi
#! /usr/bin/bash i=1 let "i+=1" echo "i=$i"循环 for while until for:循环的次数由值的个数决定
#!/usr/bin/bash for i in 1,2,3 do echo "i=$i" sleep 1 done
#!/usr/bin/bash for name in &(ls) do echo "$name" donewhile:满足判断条件就执行循环 Until:不满足条件就执行循环
#! /usr/bin/bash
until [ -f file.txt ]
do
echo "not find file"
sleep
done
以上代码没有找到file.txt就执行循环体内的代码
在脚本语言中,我们可以直接执行命令,让命令单独存放一行,他就会被当做一个命令被执行了 我们如何将命令执行的结果当做值赋给我们的变量#! /usr/bin/bash str=$(ls) echo "$str"case 函数
shell编程中函数没有返回值类型,我们可以认为他是所有类型都可以返回的,因为在shell中只要定义了变量不管是在函数中还是在脚本中,只要不做特殊声明,这个变量就会一直存在在脚本的运行周期中,所以有没有返回值没有太大的区别,因为我们可以直接调用局部变量。
#! /usr/bin/bash
fun()
{
echo "fun run"
str="hello"
echo "str=$str"
echo "$#=$#"
echo "$1=$1"
echo "$2=$2"
}
my_add()
{
echo "$#=$#"
echo "$1=$1"
echo "$2=$2"
res=`expr $1+$2`
return res
# 其实有没有return都是一样的,因为res现在全局可用
}
my_add 1 3
echo "$?=$?"
# $? 作用是取得上一行的运行结果,如果我们继续执行这一语句
echo "$?=$?"
#此时就会输出0 因为echo的运行结果被认为是始终成功的,而在shell中,成功被当作是0
当我们在shell函数中定义过变量之后,要将不用的变量unset掉,以防止影响后面的脚本运行,或者通过声明local的方式将变量声明为函数内可用即可。
脚本调用C语言,C语言调用脚本脚本调用C语言很简单,本来脚本程序中运行的就是可执行命令,当我们把C语言编译之后就会生成一个可执行命令,直接在脚本程序中写入该可执行文件,加上可执行程序的路径,我们就可以完成在脚本程序中调用C语言了。
使用C语言调用脚本就相对来说麻烦一点了,我们要知道脚本语言是可以当做命令来运行的,那么想一下在我们的C语言程序中,如何在程序执行过程中调用命令呢?想必大家不难想到,通过进程替换呗 ,当我们要调用脚本程序的时候直接通过进程复制+进程替换的方式将一个子进程替换为我们要执行的脚本程序,这样就可以完成在C语言中调用脚本程序了。
函数内可用即可。
脚本调用C语言,C语言调用脚本脚本调用C语言很简单,本来脚本程序中运行的就是可执行命令,当我们把C语言编译之后就会生成一个可执行命令,直接在脚本程序中写入该可执行文件,加上可执行程序的路径,我们就可以完成在脚本程序中调用C语言了。
使用C语言调用脚本就相对来说麻烦一点了,我们要知道脚本语言是可以当做命令来运行的,那么想一下在我们的C语言程序中,如何在程序执行过程中调用命令呢?想必大家不难想到,通过进程替换呗 ,当我们要调用脚本程序的时候直接通过进程复制+进程替换的方式将一个子进程替换为我们要执行的脚本程序,这样就可以完成在C语言中调用脚本程序了。
写在最后的话shell脚本编程的语法规则相对来说较为简单,想要用好脚本编程我们要进行命令的积累,因为脚本编程主要就是命令的集合应用,只有我们掌握更多的命令,才能更加得心应手的使用shell脚本编程。



