设为首页 加入收藏

TOP

Linux下的shell与make(一)
2014-11-24 11:52:49 来源: 作者: 【 】 浏览:0
Tags:Linux shell make

用户与Linux的接口


命令解释器


支持多用户


支持复杂的编程语言


● Shell有很多种,如:csh,tcsh,pdksh,ash,sash,zsh,bash等。Linux的缺省Shellbash(Bourne Again Shell)


Shell是用户和操作系统之间最主要接口。通过Shell,可以同时在后台运行多个应用程序,并且在把需要与用户交互的程序放在前台运行。


通过在多条命令的序列中使用变量和流程控制,Shell可以作为一名复杂的编程语言。


转义字符(metacharacters)指的是在Shell中有特殊含义的字符。


  例如:< > | ; ! * [ ] $ \ " ' ` ~ ( ) { } ^


#ls file[1-10].c


#count=`ls –l | grep ‘^d’| wc –l`


通配字符(wildcards)是转义字符的子集,用来查找匹配文件名


  例如: * [] [-] [!]


使用键,可以自动补齐。


通配一个字符:" "


通配多个字符:"*"


系统定义三个标准文件:标准输入(stdin)、标准输出(stdout)、标准错误输入(stderr)


管道符:"|",将前一个命令的输出转成下一个命令的输入。


过滤器(filters):用来接收标准输入,经过一定的转化,再写到标准输出。所以,过滤器一般放在管道符中间。


每个程序起动时,就有三个文件描述:STDIN (0),STDOUT(1),STDERR(2)。用"<"改变输入,用">"改变输出,用"2>"改变错误输出,用">>"来追加到已有的文件中。


常用的过滤器如下:expand,sed,awk,fmt,tac,tr,grep,nl,pr


多条命令可以输入到一行中,并用";"字符分隔。在一行命令后加"\"表示另起一行继续输入,下一行的提示符变为">"


printf(“\t”);


● Shell变量(Variables)是程序用来保存数据用的。


● Shell特殊变量:系统定义了一些特殊的变量。如$HOME等。使用set命令查看当时系统中定义的变量。


系统定义的特殊变量有:$TERM(当前终端类型),$PATH(命令的搜索路径),$MANPATH(手册页存放的目录),$HOME(用户主目录),$LANG(当前使用语言),$PS1,$PS2(命令提示符),$SHELL(当前Shell名)。


在命令行上打入:变量名=变量值,可以定义变量。使用 echo $变量名查看变量值。使用 unset 取消对变量的定义。


#hello=”123”


单引号表示忽略其中所有的转义字符,双引号表示忽略其中除了 $ ` \ 以外的其他的转义字符。反斜线(\)表示忽略下一个转义字符。


多条命令可以输入到一行中 并用";"字符分隔。在一行命令后加"\"表示另起一行继续输入,下一行的提示符变为">"


$ :最近执行的命令返回的值;


$$:本进程的进程号


$!:最近后台进程号


$#:shell自变量个数,$1表示第一个自变量


#varname=value :赋值


#readonly varname :标记只读


#export varname :标记移出:变量可以被子进程继承


#setenv PATH=/home:/usr:/etc:/bin:/usr/bin: (csh中)


#varname=` expr $varname + 1 ` :变量值增1 #x=$[ $x + 1 ]


#echo $PATH


用户在登录Shell时,会依次执行一系列的脚本。


使用alias命令,可以定义一些别名。


Alias ‘rm –f’ rm


登录BASH时,用户将依次执行一系列的脚本:/etc/profile , $HOME/.bash_profile ( 如果没有,执行 $HOME/.bash_login ,还没有,执行 $HOME/.profile)。注销时,会自动执行 $HOME/.bash_logout


1)test命令


测试文件、变量的属性,表达式的值,或命令执行返回值。


test –d /usr à [ -d /usr ]


test –f .bashrc à [ -f .bashrc ]


test $count –gt 0 à [ $count –gt 0 ]


2)if语句


if (expression) then


command-list


else


command-list


fi


3)case语句


case $var in


pattern1) command-list ;;


pattern2) command-list ;;




esac


4)逻辑运算符 && 和 ||


# test –f myfile.c && echo “file found”


if test –f myfile.c then


echo “file found”


fi


# test –f myfile.c | | echo “file not found”


if test ! –f myfile.c then


echo “file not found”


fi


1)for语句


for var in word-list


do


command-list


done


for count in 1 2 3


do


echo $I


done


for var


do



2)while语句


while (expression)


do


command-list


done



#greeting=’hello world’


i = 1


while test $i –le 100 ; do


case $i in


*0) echo “**********”>file$i ;;


*) echo $i > file$i ;;


esac


i = ` expr $i + 1 `


done


例:append命令的实现:


case $# in


1) cat >> $1 ;;


2) cat < $1>> $2 ;;


*) echo ‘usage: append [from] to ’;;


esac


#chmod +x myappend


#myappend file1 file2



functionname( )


{


command-list


}


usage()


{


echo “usage:…..$1”


}


usage “from … to “


注意:函数的使用就象可执行程序一样,但必须先定义,后使用。


here文档指在shell脚本中指定输入源,而不是来自文件或标准输入,其中的“<<”是here文档保留字。


# mail cindy << !@$


happy birthday


I love you


!@$


1) eva l:在shell程序中,利用变量的值来构建命令


A=ls


B= ‘ | wc -w’


eva l $A$B


2) exec:转去执行exec后命令,不建立新进程,也不返回到当前的执行过程,相当于go to 语句。


#cat execdemo


exec date


echo hello


3) read:从标准输入设备(键盘)读入一行,并把读入的字依次赋给各变量,所有剩余的字赋给最后一个变量。


#cat parrot


echo “you say:\c”


read what


echo “I repeat:$what”


4) shift:使命令行参数向左移动一位,并使记录参数总数的变量$#减1


#cat shiftdemo


while test $# != 0


do


echo $1 $2 $3


shift


done


#shiftdemo a b c


a b c


b c


c


5)wait:等待当前进程所有子进程结束,若wait后跟参

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇LED驱动程序 下一篇Android自定义地图示例:QQ地图

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·HyperText Transfer (2025-12-26 07:20:48)
·半小时搞懂 HTTP、HT (2025-12-26 07:20:42)
·CPython是什么?PyPy (2025-12-26 06:50:09)
·Python|如何安装seab (2025-12-26 06:50:06)
·python要学习数据分 (2025-12-26 06:50:03)