Linux脚本设计1——vi编辑器使⽤、变量及运算符
对⼤部分语⾔来说,需要作者实现全部功能,linux shell脚本语⾔相当于站在“巨⼈”的肩膀上,有很多实⽤的程序已经在linux系统中实现了,编写linux程序时候只需要调⽤这些程序,当然写程序之前你还是需要规划好你的产品代表的功能。
找到实⽤的程序后,先搞清楚它的功能,再将它加⼊到⾃⼰的程序中。编程者只需要像组装零件⼀样,最终组装成⼀个变形⾦刚~~
对使⽤windows操作系统作为底层平台的程序来说,⼀般会有exe后缀名(有没有其实都⼀样,只是⼀种⽂件的分类标致⽽已)。这个后缀标致代表的意思是:该程序已经转换成了机器码(0 1表⽰),可以⽴即执⾏。
对linux shell程序来说过程是这样的:⾸先程序进⾏编译(将程序翻译成机器码),并且是每次只读⼀⾏,然后翻译成机器码,接着就执⾏⼀⾏,然后再返回程序,重复上述过程,这样会影响程序执⾏效率。
总的来说是:读取⼀⾏,翻译⼀⾏,执⾏⼀⾏
⼀般来说,单任务处理系统,⼀个程序只要⼀运⾏就会接管对计算机的控制,决定屏幕输出什么内容以
及什么。linux是多任务处理,多个任务可以通过分时机制实现多任务运⾏。
要完成⼀个⼤的主题(功能),它⾥⾯会有很多⼩的功能。就是说对于⼀个很⼤的框架来说,我们可以设计、规划成⽐较⼩的框架,⼀个个实现,⽤户界⾯与它后台实际运⾏的⼦程序是相对应的。规划好整体架构和⽤户界⾯后,⼀步步实现⼩的功能,然后搭建出整体。
2.
2.1
命令、指令:同⼀个意思,⼀般来说,这些指令、命令都是⼀些实⽤的程序,在系统的环境变量中可以找到这些指令的位置,执⾏这些命令、指令可以得到相应的结果,这些都是计算机的⼀部分。
代码:多个命令指令及编写语句的集合。
程序:为完成⼀项任务的代码。——这个定义太笼统了,等于没有定义。
surrender是什么意思 Shell也和C、java⼀样是⼀种编程语⾔。有⾃⼰的关键字、语法,通过关键字的组合编写出实⽤的语句,就像我们使⽤⾃⼰的母语⼀样,以正确的⽅式发送给计算机,计算机就能懂。每⼀种语⾔都有⾃⼰的关键字,英语、中⽂都⼀样,计算机也有,关键字也称为保留字,在编写程序时,对于⽤户⾃定义的部分如变量、函数名等等都不允许使⽤。
同其他编程语⾔⼀样Shell也有⾃⼰的流程控制语句
:if,el,elif,then
:while,for in,continue
:ca
其他:let,read,echo,clear
2.3
shell是⼀类shell的统称,包括很多种,如C shell,bash,Korn shell等,不同shell代表不同的编程环境。通常shell程序是在/bin⽬录下。启动这三种shell分别命令是
C shell:csh
bash:bash
2012陕西高考数学
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命令后回车就进⼊命令模式,在其他模式下按ESC键也可以返回命令模式。ESC即escape (character):逃跑标识,即退出
可以向⽂本中输⼊新的内容,按许多字母键都可以进⼊此模式,如a,i(⼤部分shell都⽀持的),SUSE操作系统按s,q也可以进⼊此状态
按冒号:键可以进⼊最后⾏模式,⽤户可以搜索内容、保存⽂件、退出vi等。
1
i(⼩写):从命令模式切换到插⼊模式,插⼊的东西在当前光标之前
a(⼩写):从命令模式切换到插⼊模式,插⼊的东西在当前光标之后
:(冒号):从命令模式切换到最后⾏模式
Esc:从插⼊模式切换到命令模式
依靠上述⼏种命令,可以实现⼏种模式的相互切换
2
下⾯命令针对的对象都是光标并且是在命令模式下实现的
光标移动是⽂本编辑必不可少的部分,在使⽤如下命令之前可以试试⽅向键,因为不少⼯具是⽀持⽅向键光标的移动的,还有Page Up和Page Down键⽀持翻页,这四种如果⽀持,那⾜以实现光标移动,⽆须在看下⾯的命令。
h,j,k,l四个键是对应⽅向键的,可以实现上下移动。不⽤死记四个键代表往哪个⽅向移动,尝试⼀下就可以知道了。
h:光标左移⼀个字符
j:光标下移⼀⾏
k:光标上移⼀⾏
l:光标右移⼀个字符
+:光标移动⾄下⼀⾏⾏⾸
-:光标移动⾄上⼀⾏⾏⾸
0:光标移动到本⾏⾏⾸
orders
$:光标移动到本⾏⾏尾
3
圣诞节英语Ctrl +F:向前翻⼀页 F:forward
Ctrl+B:向后翻⼀页 B:backward
对⽂本的操作命令(命令模式下):⼀般来说对⽂本⽆⾮有增删改查复制粘贴以及对操作的是否取消
4
/需要查找的字符名称:查找字符
/:查找上⼀次查找的内容,
:查找上⼀次查找的内容,并且是向⾏⾸查找
:n:最后⾏模式,n代表⾏号,表⽰切换到第n⾏,如果n为0表⽰是⾸⾏,如果是美元符号$表⽰的是⽂件的最后⼀⾏
5
i:插⼊光标前(inrt)
I(⼤写i):插⼊本⾏⾏⾸
a:插⼊光标后(add)
A:插⼊本⾏⾏尾
6
yy:拷贝当前光标所在⾏到缓冲区
p:paste即粘贴,将缓冲区内容粘贴⾄当前光标后,注意粘贴时候:缓冲区只保留最后⼀次yy内容所以粘贴时候也是最后⼀次yy的内容。7
dd:删除光标所在⾏
5dd:删除包含当前⾏开始的向后5⾏内容(注意:当前⾏也算作被删除的⼀⾏)
x:删除光标所在处的字符
X:删除光标左边的字符
8
初学者学化妆u:取消最后⼀次修改
U:取消当前⾏的所做的所有修改
是否保存⽂件及退出vi编辑器(注意字母前⾯的冒号:)
duckloadZZ:退出vi并保存所有修改
:wq!(包含wq前⾯的冒号:):强制退出,并保存所有修改
:w:保存所做修改,不退出vi
:q:退出vi
:q!:退出vi,不保存修改
编写⼀个菜单显⽰程序主要使⽤echo
echo 后⾯带的字符串,通java⼀样,也是需要⽤双引号括起
3.
1.
$ echo $HOME
德语在线翻译器
/home/redbooks
2.
$ export HELLO="Hello!"
$ echo $HELLO
Hello!
3.
$ env
HOSTNAME=redbooks.safe
PVM_RSH=/usr/bin/rsh
Shell=/bin/bash
TERM=xterm
HISTSIZE=1000
...
4.
$ t
BASH=/bin/bash
英语 自我介绍
BASH_VERSINFO=([0]="2"[1]="05b"[2]="0"[3]="1"[4]="relea"[5]="i386-redhat-linux-gnu")
BASH_VERSION='2.05b.0(1)-relea'
COLORS=/etc/
COLUMNS=80
DIRSTACK=()
DISPLAY=:0.0
...
5.
t可以设置某个环境变量的值。清除环境变量的值⽤unt命令。如果未指定值,则该变量值将被设为NULL。⽰例如下: $ export TEST="" #增加⼀个环境变量TEST
$ env|grep TEST #此命令有输⼊,证明环境变量TEST已经存在了
$ unt $TEST #删除环境变量TEST
$ env|grep TEST #此命令没有输出,证明环境变量TEST已经存在了
6. 使⽤readonly命令设置只读变量
如果使⽤了readonly命令的话,变量就不可以被修改或清除了。⽰例如下:
$ export TEST="" #增加⼀个环境变量TEST
$ readonly TEST #将环境变量TEST设为只读
$ unt TEST #会发现此变量不能被删除
-bash: unt: TEST: cannot unt: readonly variable
$ TEST="New" #会发现此也变量不能被修改
-bash: TEST: readonly variable
环境变量的设置位于/etc/profile⽂件
如果需要增加新的环境变量可以添加下属⾏
export path=$path:/path1:/path2:/pahtN
按变量的⽣存周期来划分,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/libfirmenich
注:修改⽂件后要想马上⽣效还要运⾏$ 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 使⽤t查看所有本地定义的环境变量。
unt可以删除指定的环境变量。
4.
PATH 决定了shell将到哪些⽬录中寻找命令或程序
HOME 当前⽤户主⽬录
HISTSIZE 历史记录数
LOGNAME 当前⽤户的登录名
HOSTNAME 指主机的名称
SHELL 当前⽤户Shell类型
LANGUGE 语⾔相关的环境变量,多语⾔可以修改此环境变量