1.linux初学者编程入门

Linux shell和其他语言的区别

  对大部分语言来说,需要作者实现全部功能,linux shell脚本语言相当于站在“巨人”的肩膀上,有很多实用的程序已经在linux系统中实现了,编写linux程序时候只需要调用这些程序,当然写程序之前你还是需要规划好你的产品代表的功能。

  找到实用的程序后,先搞清楚它的功能,再将它加入到自己的程序中。编程者只需要像组装零件一样,最终组装成一个变形金刚~~

Linux shell程序的执行周期

  对使用windows操作系统作为底层平台的程序来说,一般会有exe后缀名(有没有其实都一样,只是一种文件的分类标致而已)。这个后缀标致代表的意思是:该程序已经转换成了机器码(0 1表示),可以立即执行。

  对linux shell程序来说过程是这样的:首先程序进行编译(将程序翻译成机器码),并且是每次只读一行,然后翻译成机器码,接着就执行一行,然后再返回程序,重复上述过程,这样会影响程序执行效率。

  总的来说是:读取一行,翻译一行,执行一行

  一般来说,单任务处理系统,一个程序只要一运行就会接管对计算机的控制,决定屏幕输出什么内容以及什么。linux是多任务处理,多个任务可以通过分时机制实现多任务运行。

  以功能与用户界面的设计、规划来驱动后台子程序的编写

  要完成一个大的主题(功能),它里面会有很多小的功能。就是说对于一个很大的框架来说,我们可以设计、规划成比较小的框架,一个个实现,用户界面与它后台实际运行的子程序是相对应的。规划好整体架构和用户界面后,一步步实现小的功能,然后搭建出整体。

2.编写第一个linux程序                                                           

2.1编写程序的几个术语

  命令、指令:同一个意思,一般来说,这些指令、命令都是一些实用的程序,在系统的环境变量中可以找到这些指令的位置,执行这些命令、指令可以得到相应的结果,这些都是计算机的一部分。

  代码:多个命令指令及编写语句的集合。

  程序:为完成一项任务的代码。——这个定义太笼统了,等于没有定义。

  Shell也和C、java一样是一种编程语言。有自己的关键字、语法,通过关键字的组合编写出实用的语句,就像我们使用自己的母语一样,以正确的方式发送给计算机,计算机就能懂。每一种语言都有自己的关键字,英语、中文都一样,计算机也有,关键字也称为保留字,在编写程序时,对于用户自定义的部分如变量、函数名等等都不允许使用。

2.2 Shell流程控制语句

  同其他编程语言一样Shell也有自己的流程控制语句

  条件句:if,else,elif,then

  循环句:while,for in,continue

  分支句:case

  其他:let,read,echo,clear

2.3 选择一种shell

  shell是一类shell的统称,包括很多种,如C shell,bash,Korn shell等,不同shell代表不同的编程环境。通常shell程序是在/bin目录下。启动这三种shell分别命令是

  C shell:csh

  bash:bash

  Korn shell:ksh

  在/bin目录下可以看到常用的命令

  这里选用bash 即Borne Again shell

2.4执行一项任务(包含多命令 )

  直接输入命令法:这种是不将脚本放在文件中,直接命令提示符后面写命令,命令之间用分号;隔开,每一行最多允许255个字符

  脚本法:           这种是将命令放在文件中,命令放在文件中,命令可以单独放一行,行尾没有分号

  通常简单的查看信息可以用第一种,而复杂的任务使用第二种,比如为了查看日期,没有必要建一个文件,写个命令,然后修改执行权限,再执行,这样做等于把简单的事情复杂化。复杂的任务通常需要第二种,对于一个大的任务来说,需要分成小的任务,然后分别解决小的问题,再组装设计成一个整体。

  注意:对于第二种来说,也可以把命令放在一行,命令间用分号隔开。执行时候有两种办法

  绝对路径法:脚本绝对路径,执行即可如/home/hadoop/Demo/Demo.sh

  相对路径:   如果当前用户处在Demo目录,则可以用./Demo.sh,./表示当前目录的意思

  另一种办法是直接执行脚本,在任何一个目录在拥有权限的情况下,执行Demo.sh,这种执行需要将程序所在的目录放在系统的命令路径变量PATH里面,将路径放在PATH里面后,系统根据路径,找到执行目录,就可以执行了。PATH变量是放在/etc/profile里面的,可以在这个文件里面添加,也可以用export Demo=/home/hadoop/Demo方式添加,然后使用source /etc/profile方式刷新文件,再执行Demo.sh就可以了

  备注:对于linux有些使用字符串的命令来说,需要带双引号,不带也行,建议带上,这样显得字符串是一个整体,结构性更强。

  例如echo Hello World 与echo "Hello World"执行结果是一样的,建议用上双引号,当语句复杂时候,带上双引号会使语句结构清晰。另外如果不带上双引号的话,那么有些单词缩写this‘s是不显示单引号的’的,所以带上是万能的,不带是有风险的。

2.5使用vi编辑器编写程序

2.5.1 vi编辑器的模式(状态)

命令模式:   可以用户可以查看文本(程序),无法向其中输入内容,输入vi命令后回车就进入命令模式,在其他模式下按ESC键也可以返回命令模式。ESC即escape (character):逃跑标识,即退出

插入模式:   可以向文本中输入新的内容,按许多字母键都可以进入此模式,如a,i(大部分shell都支持的),SUSE操作系统按s,q也可以进入此状态

最后行模式:按冒号:键可以进入最后行模式,用户可以搜索内容、保存文件、退出vi等。

2.5.2 vi编辑器常用命令

1、模式切换

i(小写):从命令模式切换到插入模式,插入的东西在当前光标之前

a(小写):从命令模式切换到插入模式,插入的东西在当前光标之后

:(冒号):从命令模式切换到最后行模式

Esc:从插入模式切换到命令模式

依靠上述几种命令,可以实现几种模式的相互切换

2、移动光标

下面命令针对的对象都是光标并且是在命令模式下实现的

光标移动是文本编辑必不可少的部分,在使用如下命令之前可以试试方向键,因为不少工具是支持方向键光标的移动的,还有Page Up和Page Down键支持翻页,这四种如果支持,那足以实现光标移动,无须在看下面的命令。

h,j,k,l四个键是对应方向键的,可以实现上下移动。不用死记四个键代表往哪个方向移动,尝试一下就可以知道了。

h:光标左移一个字符

j:光标下移一行

k:光标上移一行

l:光标右移一个字符

+:光标移动至下一行行首

-:光标移动至上一行行首

0:光标移动到本行行首

$:光标移动到本行行尾

3、翻页(命令模式下)

Ctrl +F:向前翻一页 F:forward

Ctrl+B:向后翻一页 B:backward

对文本的操作命令(命令模式下):一般来说对文本无非有增删改查复制粘贴以及对操作的是否取消

4、查找文本

/需要查找的字符名称:查找字符

/:查找上一次查找的内容,

?:查找上一次查找的内容,并且是向行首查找

:n:最后行模式,n代表行号,表示切换到第n行,如果n为0表示是首行,如果是美元符号$表示的是文件的最后一行

5、添加字符

i:插入光标前(insert)

I(大写i):插入本行行首

a:插入光标后(add)

A:插入本行行尾

6、拷贝和粘贴文本

yy:拷贝当前光标所在行到缓冲区

p:paste即粘贴,将缓冲区内容粘贴至当前光标后,注意粘贴时候:缓冲区只保留最后一次yy内容所以粘贴时候也是最后一次yy的内容。

7、删除字符

dd:删除光标所在行

5dd:删除包含当前行开始的向后5行内容(注意:当前行也算作被删除的一行)

x:删除光标所在处的字符

X:删除光标左边的字符

8、取消操作
u:取消最后一次修改

U:取消当前行的所做的所有修改

是否保存文件及退出vi编辑器(注意字母前面的冒号:)

ZZ:退出vi并保存所有修改

下面的是最后行模式的,因为有冒号:

:wq!(包含wq前面的冒号:):强制退出,并保存所有修改

:w:保存所做修改,不退出vi

:q:退出vi

:q!:退出vi,不保存修改

编写一个菜单显示程序主要使用echo

echo 后面带的字符串,通java一样,也是需要用双引号括起

3.变量的定义及使用

3.1 linux的环境变量

    1. 显示环境变量HOME

  $ echo $HOME

  /home/redbooks

  2. 设置一个新的环境变量hello

  $ export HELLO="Hello!"

  $ echo $HELLO

  Hello!

  3. 使用env命令显示所有的环境变量

  $ env

  HOSTNAME=redbooks.safe.org

  PVM_RSH=/usr/bin/rsh

  Shell=/bin/bash

  TERM=xterm

  HISTSIZE=1000

  ...

  4. 使用set命令显示所有本地定义的Shell变量

  $ set

  BASH=/bin/bash

  BASH_VERSINFO=([0]="2"[1]="05b"[2]="0"[3]="1"[4]="release"[5]="i386-redhat-linux-gnu")

  BASH_VERSION='2.05b.0(1)-release'

  COLORS=/etc/DIR_COLORS.xterm

  COLUMNS=80

  DIRSTACK=()

  DISPLAY=:0.0

  ...

  5. 使用unset命令来清除环境变量

  set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下:

  $ export TEST="Test..." #增加一个环境变量TEST

  $ env|grep TEST #此命令有输入,证明环境变量TEST已经存在了

  TEST=Test...

  $ unset $TEST #删除环境变量TEST

  $ env|grep TEST #此命令没有输出,证明环境变量TEST已经存在了

  6. 使用readonly命令设置只读变量

  如果使用了readonly命令的话,变量就不可以被修改或清除了。示例如下:

  $ export TEST="Test..." #增加一个环境变量TEST

  $ readonly TEST #将环境变量TEST设为只读

  $ unset TEST #会发现此变量不能被删除

  -bash: unset: TEST: cannot unset: readonly variable

  $ TEST="New" #会发现此也变量不能被修改

  -bash: TEST: readonly variable

  环境变量的设置位于/etc/profile文件

  如果需要增加新的环境变量可以添加下属行

  export path=$path:/path1:/path2:/pahtN

  总结:

  1.Linux的变量种类

  按变量的生存周期来划分,Linux变量可分为两类:

  1.1 永久的:需要修改配置文件,变量永久生效。

  1.2 临时的:使用export命令声明即可,变量在关闭shell时失效。

  2.设置变量的三种方法

  2.1 在/etc/profile文件中添加变量【对所有用户生效(永久的)】

  用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。

  例如:编辑/etc/profile文件,添加CLASSPATH变量

  # vi /etc/profile

  export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

  注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。

  2.2 在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】

  用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。

  例如:编辑guok用户目录(/home/guok)下的.bash_profile

  $ vi /home/guok/.bash.profile

  添加如下内容:

  export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

  注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。

  2.3 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】

  在shell的命令行下直接使用[export 变量名=变量值] 定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。

  3.环境变量的查看

  3.1 使用echo命令查看单个环境变量。例如:

  echo $PATH

  3.2 使用env查看所有环境变量。例如:

  env

  3.3 使用set查看所有本地定义的环境变量。

  unset可以删除指定的环境变量。

  4.常用的环境变量

  PATH 决定了shell将到哪些目录中寻找命令或程序

  HOME 当前用户主目录

  HISTSIZE 历史记录数

  LOGNAME 当前用户的登录名

  HOSTNAME 指主机的名称

  SHELL   当前用户Shell类型

  LANGUGE  语言相关的环境变量,多语言可以修改此环境变量

  MAIL   当前用户的邮件存放目录

  PS1   基本提示符,对于root用户是#,对于普通用户是$

3.2变量的引用

  用$引用变量,引用的位置不限,比如进行日志备份的时候可以在日志嵌入日期,这样打日志的时候就可以记录日期,脚本如下:

  today=`date +%y%m%d`//注意这里引用的单引号不是普通的单引号,是美式键盘~同一个按键下面的符合`,它的作用是能将包起的命令输出结果赋值                //给左边的变量,不是双引号下面的单引号

  ls /usr/bin >log.$today

  $的转义

  echo "it costs $15"

  输出结果是it costs 5,显然这个不是我们想要的。系统把$1当做一个变量的饮用,而不是15美元,要想显示,需要用\转义字符,即\$即可。

程序通常与数据的关系如下:

1、  程序从键盘或者文件获得数据

2、  程序处理数据

3、  把数据显示在屏幕上或存储在文件中

变量的分类:

局部变量:由程序员建立,仅供程序自身用

环境变量:由程序员建立,供所有人使用

变量类型

shell中使用两种数据类型:数值型和字符串型

变量命名规则

  字母,数字,下划线组成,并且开头必须是字母,变量中间不能有空格。

创建变量

  使用关键字declare或export

放置变量

  在程序任何一处声明变量都是可以的,但是并不鼓励这么干,因为这样会使程序的可读性变低,不知道从哪里冒出一个变量。可以把变量集中放置一个程序文件的开始,这样方便看。

同时声明多个变量

declare length  width 变量之间用空格隔开。

变量赋值      
使用语法let 变量名=变量值

使用let关键字让的意思 让某个变量值是XXX

注意:shell中赋值时候等号=两边的变量名和变量值之间没有空格,这与java是不同的,如果写了空格会报错的

字符串变量需要使用declare或者export来声明,但是let只能声明数值型

变量值可以是字符串,字符串必须像java一样带上双引号

引用变量时候需要带上美元符号$

将一个变量值赋给另外一个变量

declare name =“hola”

declare name2 = “$name”//注意使用了双引号,还有美元符号$

数值型变量也可以复制

let length=10

let width=$length

let high=”$length-$width”注意双引号要加上。

备注:也可以不用let关键字声明变量,直接用变量=变量值的方式定义,这样更加简单,系统会自动识别变量的类型进行存储。

与用户交互

使用read关键字

read作用是使计算机等待用户将输入的内容存储在缓冲区,然后读取这些东西放在声明的变量中,程序运行时候,输入完数据需要使用enter回车键输入。

如:read response 就是讲用户输入的内容,放在response中

#!/bin/bash表示在所有命令执行前,启动bash

文件输出的重定向

通常情况下数据信息输出时候输出的位置都是在终端上显示,但也有很多时候并不需要把信息输出到终端位置,而是输出到文件中。把数据输出到文件的过程称为输出重定向(redirection),也就是改变数据输出流向。

重定向使用运算符>大于符号

>文件名

使用时候注意

1、  如果文件名对应的文件不存在,那么系统将重新创建一个新文件,并将数据存储在新文件中

2、  如果文件名对应的文件已经存在,那么输出的内容将覆盖掉原有的内容。

3、  如果使用echo “内容”>文件名,那么echo后的内容在屏幕上将不再显示,而只是存储在文件名对应的文件中

4、  如果要向文件中添加数据,而不是覆盖数据,使用关键字>>,这个运算符将数据添加到文件末尾,而不是覆盖原有的数据文件。并且是换到新一行来添加的。

linux 运算符

本章介绍的运算符有如下几种:

算术运算符:即加减乘除外加求余运算符%

逻辑运算符:或且非/或与非

比较运算符:

另外介绍运算符的优先级

算术运算符:

求余运算符就是计算两个数相除后的余数(整除部分另外多出来的部分)

注意赋值时候:

let high=”$length-$width”注意双引号要加上。

注意:shell中赋值时候等号=两边的变量名和变量值之间没有空格,这与java是不同的,如果写了空格会报错的

逻辑运算符

!非,进行非判断,如果a=300是真,则a!=300是假

&& 与两个都为真,则为真

|| 或:有一个真即可

比较运算符

能够比较两个数值或者字符串

-eq  equals 等于

-ne   not equals 不等于

-gt    greater than 大于

-ge  greater equals 大于等于

-lt     less than 小于

-le  小于等于

使用test命令进行比较

语法:test $a 比较运算符 $b

如果比较结果是符合逻辑的,那么返回一个真值,如果不符合,则返回一个假值。

注意:实际比较值和具体的环境有关,有的符合逻辑返回的是0,不符合的返回是1

转载于:https://www.cnblogs.com/people/archive/2013/04/11/3014027.html

Linux脚本设计1——vi编辑器使用、变量及运算符相关推荐

  1. Linux实验二:vi编辑器的使用

    文章目录 一.实验目的 二.实验要求 三.实验内容 1.创建文件 2.编辑文件 一.实验目的 1.练习并掌握Linux提供的vi编辑器来编译C程序 2.学会利用gcc.gdb编译.调试C程序 3.本次 ...

  2. Linux常用命令,vi编辑器命令,Linux软件安装

    文件系统 / 根目录 (相当于Windows我的电脑) opt 存放第三方应用软件 etc 配置文件 dev 设备文件 usr 用户文件 kernel 内核 var variable可变的 expor ...

  3. linux退出vi编辑器操作,Linux下怎么退出VI编辑器

    用的命令是:ctrl + R vi编辑器中有三种状态模式 1.命令模式 2.输入模式 3.末行模式 三种模式间的相互转换 vi编辑器的启动与退出 直接进入编辑环境 $ vi 进入编辑环境并打开(新建) ...

  4. linux脚本设计菜单,菜单式shell脚本编写

    用shell脚本编写有以下的功能: Syste Manage 1.show the user //显示登陆系统用户以及动作. 2.test the network //网络测试 3.show the ...

  5. linux 入门学习 退出vi编辑器

    转载自:http://blog.csdn.net/u010648555/article/details/50676647 初学Linux的时候,在使用vi 操作时候,有时候可能进入的是一个文件夹,这样 ...

  6. linux怎么进去vi编辑器,red hat enterprise linux开机怎么进入vi编辑器界面?

    2015-05-21 回答 后面输入直接打回车就会显示出来如下 xx文件 #■sa■jsadjk #■sa■jsklfjdl kl■sa : ----现在是低行模式 现在按esc 进入第一个模式(命令 ...

  7. <<linux教程>>第五版 实验三 实验四 ----linux 关于 shell跟vi编辑器,简单命令,刚需上

    进入vi. :wq 文件名 \2. 建立一个文件,如file.co进入插入方式,输入一个C语言程序的各行内容,故 意制造几处错误.最后,将该文件存盘.回到shell状态下. 制造头文件不存在的问题 运 ...

  8. linux下怎么退出vi编辑器,按esc没有用;vim recording

    Ctrl c 然后 Shift z z 保存退出 Ctrl z 直接退出不保存 有时敲exit也管用 vim recording功能介绍 使用vim时无意间触碰到q键,左下角出现"recor ...

  9. Linux中什么命令显示vi缩写,Linux命令(八)——vi编辑器的使用

    vi编辑器是linux系统下的标准正文编辑器,有三种基本模式:命令行模式.插入模式和底行命令模式. 1.命令行模式:控制屏幕光标的移动,字符.字或行的删除,移动复制某区段及进入插入模式或底行命令模式下 ...

最新文章

  1. java bank项目答案_Java基础实战Bank项目01-04
  2. 2021清华大学年度人物候选 | 曹丰泽:我要证明,理想主义的路是走得通的
  3. 20110125 学习记录:在SQL Server 2005数据库中修改存储过程
  4. 编程入门python语言是多大孩子学的-如何看待将Python作为少儿编程的基础语言?...
  5. python中值滤波去除反光_Python 实现中值滤波、均值滤波的方法
  6. componentsJoinedByString 和 componentsSeparatedByString 的方法的区别
  7. 宝塔mysql远程链接_宝塔apache启动失败:报错 AH00526: Syntax error on line 解决方案
  8. [剑指offer]面试题13:在O(1)时间删除链表结点
  9. linux进程如何挂起自己,Linux Server HTTP进程每天挂起服务器
  10. 作者:宋杰(1980-),男,博士,东北大学软件学院副教授
  11. 【非公开】#include
  12. android 相对布局例子代码
  13. 17.Linux/Unix 系统编程手册(上) -- 访问控制列表
  14. JavaWeb学习(较全较简)
  15. 考研倒计时软件 终结版
  16. 神操作,用Python教你暴力破解WiFi密码,附赠技术实现视频
  17. Unity提取模型动画
  18. 浏览器播放rtsp视频,基于nodeJs
  19. 家族谱树形数据结构实现
  20. 017 Vowels match

热门文章

  1. ActionBar之分享图片
  2. 【日志】atmega4809使用体验-准备工作
  3. 关于优酷视频代码播放的若干事情……
  4. Facebook WDT (Folly) 安装指南 -- CentOS 7
  5. 如何'安装linux系统,如何安装linux系统
  6. android onresume方法,Android onActivityResult()和onResume()的执行顺序
  7. Linux C语言 fileno(返回文件流所使用的文件描述词)
  8. 发明专利实质审查需要多久?
  9. 以太坊EVM源码注释之State
  10. 13个QA带你了解线上压测的知识点