《vi-shell脚本-gcc-2013.docx》由会员分享,可在线阅读,更多相关《vi-shell脚本-gcc-2013.docx(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、vi-shell脚本-gcc四川交通职业技术学院-网络教研室 2013-11./没有第一部分 VI编辑器命令模式移动光标G移动到最后一行nG移动到第n行H首行行首M中间行行首L最后一行行首删除x删除字符nxdd删除行ndd复制与粘贴yw复制字nywyy复制行nyyp粘贴撤销与恢复u撤销.恢复退出ZZ保存退出末行模式退出:q:wq:q!强制退出移动光标:n显示行号:set nu文件相关:w保存:w file把当前编辑的内容写到file文件中:n1,n2w file把n1到n2行的内容写到file文件中:1,. w file 把从第1行到光标当前位置的内容写到file文件中:.,$ w file把
2、从光标当前位置到文尾的内容写到file文件中:r file打开另外一个file文件:e file新建file文件:f file把当前文件改名为file文件查找替换:1,$ s/str1/str2/g全文中的字符串str1替换为字符串str2:1,. s/str1/str2/g从第1行到光标当前位置中的字符串str1替换为字符串str2:.,$ s/str1/str2/g从光标当前位置到文尾中的字符串str1替换为字符串str2复制与移动、删除:n1,n2 co n3把n1到n2行所有内容复制到n3行之后:n1,n2 m n3把n1到n2行所有内容移动到n3行之后:d删除光标所在当前行:nd:n
3、1,n2d执行shell命令:! cmd运行shell命令cmd:r!cmd把命令cmd的运行结果写到当前行位置第二部分 编写Linux的Shell脚本一.编写一个简单的Shell脚本步骤l 使用编辑器写脚本文件内容wjlocalhost $ vi myshell1.sh#! /bin/bashecho The current directory is $PWDx=500echo x=$xl 给脚本文件赋予执行权限chmod +x myshell1.shl 运行脚本文件wjlocalhost $ ./myshell1.sh二.修改登录Shell脚本(使用普通用户帐户实验)wjlocalhost
4、 $ vi .bash_profile三. Shell变量的定义1.直接为变量赋值x=500y=$xc=namewjlocalhost /$ y=500wjlocalhost /$ echo $y500wjlocalhost /$ echo y=$yy=$500 wjlocalhost /$ echo y=$yy2.变量置换取得值mydate=dateecho $mydate3.通过命令参数传递$n代表传递的第n个参数$0执行命令的名称$#参数总数$命令行中所有参数组成的字符串$?前驱命令返回值#! /bin/bashecho list:$echo count:$#echo 第1个传递的参数是
5、:$1echo 第2个传递的参数是:$24.系统环境变量HOMEPWDOLDPWDPS1PATH 5.读用户输入#! /bin/bashecho Please input your name:read bufferecho Hello $buffer四. Shell表达式1.关系与逻辑表达式test 关系表达式关系表达式l 数值测试test num1 num2 num1 num2 -eq 判断是否相等,相等则为真 -ne 判断是否不相等,不相等则为真 -gt 判断是否大于,大于则为真 -ge 判断是否大于等于,大于等于则为真 -lt 判断是否小于,小于则为真 -le 判断是否小于等于,小于等于
6、则为真l 字符串测试= 用于比较两个字串是否相等!= 用于比较两个字串是否不相等-z 用于判断一个字符串长度是否为0-n 用于判断一个字符串长度是否不为0l 文件测试-e 若文件存在则为真-r 若文件存在且可读则为真-w 若文件存在且可写则为真-x 若文件存在且可执行则为真-s 若文件存在且至少有一个字符则为真-d 若文件存在且为目录则为真-f 若文件存在且为普通文件则为真-b -L 若文件存在且为符号链接文件则为真-O 若文件存在且为当前用户文件则为真-G 若文件存在且为当前组用户文件则为真逻辑表达式:-a “与”运算 同时满足-o “或”运算! “非”运算 对一个条件取反 $num ge
7、0 -a $num le 100 2.算术运算表达式$( )wjlocalhost $ a=123wjlocalhost $ b=456wjlocalhost $ echo $(123+456)579wjlocalhost $ echo $($a+$b)579wjlocalhost $ echo $(a+b)5793.expr命令wjlocalhost $ count=1 $count 循环wjlocalhost $ count=expr $count + 1 wjlocalhost $ echo $count2五. Shell脚本结构(一).分支结构if 表达式 then 命令语句块fiif
8、 表达式 then 命令语句块1 (真值) else 命令语句块2 (假值)fi= if分支结构 例1=#! /bin/bashecho Please input a file name:read filenameif -e $filename then echo $filename is exists else echo $filename isnt existsfi=if 表达式1 then if 表达式2 then 命令语句块 else 命令语句块fi else if 表达式3 then 命令语句块 else 命令语句块fifiif then 命令语句块 elif then 命令语句块
9、elif then 命令语句块 elif then 命令语句块.else 命令语句块fi= if多分支结构 例1=#! /bin/bashecho Please input a students score:read scoreif $score -ge 0 -a $score -le 100 then if $score -ge 90 then echo 优 elif $score -ge 80 then echo 良 elif $score -ge 70 then echo 中 elif $score -ge 60 then echo 合格 else echo 不合格 fi else ec
10、ho 你的输入不合法fi=case.esac多分支结构case 变量 in值1)命令语句块 ;值2)命令语句块;值3)命令语句块;.值n)命令语句块;*)命令语句块;esac= case.esac多分支结构 例1=#! /bin/bashecho Please input a number from 1 to 10:read number case $number in 1) echo ONE ; 2) echo TWO ; 3) echo THREE ; 4) echo FOUR ; 5) echo FIVE ; 6) echo SIX ; 7) echo SEVEN ; 8) echo E
11、IGHT; 9) echo NINE ; 10) echo TEN ; *) echo 你的输入不合法 ; esac= case.esac多分支结构 例2=#! /bin/bashclearecho Do you like Linux:read like_it case $like_it in y|yes|Y|YES) echo Linux is a good friend of us ; n|no|N|NO) echo Try it ,and you will like it ; *) echo Your anser is $like_it ; esac=(二).循环结构while do 命
12、令语句块 done= while循环 例1=#! /bin/bashnum=1while $num -le 10 do echo current value of num is :$num num=expr $num + 1 done=until do 命令语句块 done= until循环 例1=#! /bin/bashnum=1untile $num -gt 10 do echo current value of num is :$num num=expr $num + 1 done=for 变量名 in 变量表 do 命令语句块 Done= for循环 例1=#! /bin/bashfo
13、r num in 1-10do echo current value of num is :$numdone=(三).函数=函数 例1=#! /bin/bash# An example script of functionfunction demo_fun( )echo Your command is :$0 $echo Number of Parameters is : $#echo Parameters ($*) is : $*echo Parameters ($) is : $count=1for param in $do echo Parameters ($ $count) is :
14、$param count=expr $count + 1 donecleardemo_fun $=函数 例2=#! /bin/bash# a simple shell script example# a Functionfunction say_hello( )echo Enter your name,Please:read nameecho Hello $nameecho Programme starts here.say_helloecho Programme Ends.运行结果:wjlocalhost $ helloProgramme starts here.Enter your nam
15、e,Please:tom Hello tomProgramme Ends.=(四).SHELL综合应用示例(用于备份文件到家目录的backup中,并生成记录日志文件)第三部分 GCC的使用与开发一. GCC简介1.一个C/C+程序从开始编码到生成可执行的二进制文件至少需要四个步骤n 预处理n 编译n 汇编n 链接 2. GCC的使用及常用选项gcc 选项 选项-o file将经过gcc处理过的结果保存为file-c生成目标文件*.o-Idir在编译源程序时增加一个搜索头文件的额外目录dir-g在可执行文件中加入调试信息,方便进行程序的调试。-Wall允许产生所有警告。-Werror出现警告就停
16、止编译。-E表示在预处理后停止-S表示在编译后停止3. GCC与C/C+相关的输入文件扩展名的命名规范扩展名类型可进行的操作方式*.cC语言源程序预处理、编译、汇编、链接 *.cc,*.C,*.cp,*.cpp,*.C+,*.cxxC+语言源程序预处理、编译、汇编、链接*.i预处理后的C语言源程序编译、汇编、链接*.ii预处理后的C+语言源程序编译、汇编、链接*.s预处理后的汇编程序汇编、链接*.h头文件不进行任何操作*.o目标文件链接二. 利用GCC开发C语言程序rootlocalhost # gcc -E hello.c -o hello.irootlocalhost # gcc -S h
17、ello.c -o hello.s三. 多个文件的C程序代码文件名greeting.hgreeting.cimy_app.c三个文件在一个目录下时:rootlocalhost # gcc my_app.c greeting.c -o my_app rootlocalhost # ./my_appYour name please:tom Hello tom! rootlocalhost #三个文件目录结构重构后,如下: my_app.c当前工作目录 ./ greeting.h functions/ greeting.crootlocalhost # gcc my_app.c functions/
18、greeting.c -o my_app -I functions或者分为三个步骤:rootlocalhost # gcc -c my_app.c -Ifunctionsrootlocalhost # gcc -c functions/greeting.crootlocalhost # gcc my_app.o greeting.o -o my_approotlocalhost # ./my_appYour name please: tom Hello tom! rootlocalhost #四.调试五.makefile自动生成1.在应用程序所在目录,创建makefile文件,内容如下:2.
19、make3. ./my_app六.发布源码程序包1.把源文件放到一个目录中:2.目录下:autoscan:-生成configure.scan文件3.mv configure.scan configure.in4.vi configure.in(修改)*AC_PREREQ(2.59)AC_INIT(helloworld, 1.0,xu)AM_INIT_AUTOMAKE# Checks for programs.AC_PROG_CXXAC_PROG_CCAC_PROG_RANLIB# Checks for libraries.# Checks for header files.# Checks f
20、or typedefs, structures, and compiler characteristics.AC_HEADER_STDBOOLAC_C_CONSTAC_TYPE_SIZE_T# Checks for library functions.AC_FUNC_MEMCMPAC_HEADER_STDCAC_OUTPUT(Makefile)*5.aclocal6.autoconf7.vi Makefile.am*AUTOMAKE_OPTIONS= foreignbin_PROGRAMS=helloworldhelloworld_SOURCES=helloworld.c*AUTOMAKE_OPTIONS= foreignbin_PROGRAMS=my_appINCLUDES=-I functionsmy_app_SOURCES=my_app.c functions/greeting.c8.在目录下automake -add-missing9. ./configure10. make*.tar.gz源码包的安装1.解包、解压tar zxvf *.tar.gz2.进入解压的文件目录cd *3配置./configure4.make5.make install