您的位置:首页 > 运维架构 > Shell

Linux学习笔记——轻松学Linux shell编程 第一部分:Linux初学者编程入门

2013-04-16 22:39 274 查看
第一部分:linux初学者编程入门

1.1 chmod命令

  这个命令是用于改变三种角色对文件的使用权限的,具体含义是:

  三种角色:user(文件或文件夹的所有者)、group(user所在的群组)、others(用户群组以外的其他用户)

  文件使用权限:read(有读权限),write(有写权限),executable(有执行权限),这三种权限分别有对应权限值1,2,4(刚好等比数列)。

  每一种角色都有上述三种权限位,三种权限位的和值就代表了这种角色有何种权限。这三种权限位的和值有如下几种值:

  1,2,3,4,5,6,7即(1~7)

chmod命令的使用语法是:chmod 权限和值 文件名

比如说在用户hadoop的某个文件夹下有名为tangbao.sh的文件,现在执行如下命令:chmod 765 tangbao.sh,分析如下:

7,6,5分别代表user(即hadoop),group(hadoop所在的群组),others(group群组包含的用户以外的用户)所具有的权限位和值。

7只能是1,2,4相加(权限位的基准值只有1,2,4三个),也就是user具有读、写、执行的权限

6只能是2,4相加,也就是除了user以外的其他group用户有写、执行权限

5只能是1,4相加,也就是group以外的其他用户有读和执行权限

Linux shell脚本语言和其他语言的区别

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

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

Linux shell程序的执行周期

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

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

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

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

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

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

  第三章 编写第一个linux程序  

编写程序的几个术语:

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

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

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

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

  条件句:if,else,elif,then

  循环句:while,for in,continue

  分支句:case

  其他:let,read,echo,clear

选择一种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

使用vi编辑器编写程序

vi有如下几种模式(状态):

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

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

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

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一样,也是需要用双引号括起

第四章 变量

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

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

cat命令

cat是读取文件的意思,cat 文件名能够显示文件的内容。如果没有改文件,cat 文件会报错,报文件不存在,与vi不同,如果文件不存在,那么会自动新建一个文件。

第六章 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

第三部分 linux控制语句

  控制语句就是控制语句往哪走怎么走,linux控制语句与其他语言一样有三种:条件语句,分支语句和循环语句,这三种语句也反应了现实中的逻辑。

第七章 条件语句

if,if else,if elif语句

上述都用fi结束

条件语句:先进行逻辑条件判断,再决定程序执行哪一种情况

表示逻辑条件有如下方式:

1、 单一变量

2、 表达式

每一个if(包括elif)后面都要有一个then,并且最后以fi结束

if语句使用语法

if [condition]

then

instruction

fi

if…else 语句使用语法

if [condition]

then

instruction

else

instruction

fi

if …elif语句使用语法

if [condition1]

then

instruction1

elif[condition2]

then

instruction2

fi

在最后添加elif instruction3 fi可以保证至少执行一条命令 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: