代码改变世界

学习shell和shell script

2013-09-05 15:26  ziflyingyo11  阅读(344)  评论(0)    收藏  举报

学习shell和shell script

  • Vim程序编辑器

     Vim是vi的高级版本,它可以用颜色或底线等方式显示一些特殊的信息,是一种文字处理器,同时也是一个很好的程序开发工具。

3种模式:一般模式、编辑模式与命令行模式

一般模式:为默认模式,可以使用上下左右按键移动光标;x,X删除字符;dd删除光标所在的一整行;ndd删除光标所在的向下n行;yy复制光标所在的一整行;p,P将已复制的数据在光标下一行、上一行黏贴;J将光标所在行与下一行的数据结合成同一行;u复原前一个操作;[ctrl]+r重做上一个操作。

编辑模式:按下i即可从一般模式切换到编辑模式,按下esc即可从编辑模式切换到一般模式。

命令行模式:一般模式切换到命令行模式可用的按钮有:?/

:w—将编辑的数据写入硬盘文件中

:q—离开vi

:wq—保存后离开

/字符串?字符串—查询字符

 

  • 认识和学习bash

1、什么是Shell

      Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。用户必须通过“shell”将输入命令与内核通信,从而让内核可以控制硬件正确无误地工作。

狭义的shell是指命令行方面的软件,广义的shell则包括图形界面软件。

      shell提供了用户与操作系统之间通讯的方式。这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shell script(非交互)方式执行。shell script是放在文件中的一串shell和操作系统命令,它们可以被重复使用。本质上,shell script是命令行命令简单的组合到一个文件里面。

2、在哪可以检查linux有多少shell?

查看/etc/shells这个文件

3、bash shell的优点

a)命令记忆能力(history):命令记录在主文件夹内的.bash_history中,最大的好处就是可以查询曾经做过的操作。

b)命令与文件补全功能([TAB]按键的好处)

【Tab】接在一串命令的第一个字的后面,则为“命令不全”;

【Tab】接在一串命令的第二个字以后时,则为“文件补齐”。

c)命令别名设置功能(alias):使用命令别名可以替换比较长的命令,比如:alias ll=’ls –al’。

d)作业控制、前台、后台控制:(详情17章笔记再做补充)

e)程序脚本(shell script):13章再做补充

f)通配符(wildcard)

4、如何知道一个命令是来自于外部命令还是内置在bash中的命令?

可以利用type这个命令来查看。例如:

#type cd

cd is a shell builtin

5、shell变量

显示命令:echo $variable (variable表示某变量名称)

取消变量:unset variable

6、单引号和双引号的用途有何不同?反单引号(`)的意义是?

①双引号可以保有变量的内容,但单引号内只能是一般字符,而不会有特殊字符。

②在一串命令中,反单引号之内将会被先执行,而其执行的结果将作为外部的输入信息。

7、查看环境变量的命令:#env

   查看环境变量和自定义变量的命令:#set

8、一些特殊的变量

①提示符变量:PS1

PS1=’[\u@\h \w \A #\#]\$’

\u:目前用户的账号名称

\h:仅取主机名在第一个小数点之前的名字

\w:完整的工作目录名称

\A:显示时间,为24小时格式的“HH:MM”

\#:执行的第几个命令

\$:提示符,如果是root时,提示符为#,否则就是$

②关于本shell的线程代号PID的变量:$

所以,如果想知道我们的shell的PID,可以使用:#echo $$

③上个执行命令的回传码:?

一般来说,如果成功执行一个命令,则会回传一个0值,如果执行过程发生错误,就会回传“错误代码”,错误代码一般以非0的数值来替代。

所以,如果想知道上个执行命令是否执行成功,可用这个命令检查:#echo $?

9、由于子进程只会继承父进程的环境变量,而不会继承父进程的自定义变量,所以当子进程需要用到父进程的自定义变量时,首先应将其转变成环境变量:#export 变量名称

如果export后没有接变量时,此时将会把所有的“环境变量”显示出来。

10、如何知道我们用的linux支持了多少语系?

#locale –a

11、一些常用的命令

命令别名设置:#alias rm=’rm –I’

取消命令别名:#unalias rm

列出目前内存内的所有history记忆:#history

列出目前最近的3条数据:#history 3

立刻将目前的数据写入histfile当中:#history –w  (在默认情况下,会将历史记录写入~/.bash_history当中)

利用历史命令执行命令的方法:

#!66   执行内存中的第66笔命令

#!!    执行上一个命令

#!al    执行最近的以al为开头的命令

12、命令运行的顺序:

①以相对、绝对路径执行命令

②由alias找到该命令来执行

③由bash内置的(builtin)命令来执行;

④通过$PATH这个变量的顺序找到的第一个命令来执行

13、bash的登陆信息在:/etc/issue

Bash的欢迎信息在:/etc/motd

14、数据流重定向:就是将某个命令执行后应该要出现在屏幕上的数据传输到其他的地方,例如文件或者设备(打印机之类的)。

标准输入(stdin):代码为0,使用<或<<

标准输出(stdout):代码为1,使用>或>>

标准错误输出(stderr):代码为2,使用2>或2>>

注意:

1>和2>分别以覆盖的方法将正确/错误的数据输出到指定的文件或设备上

1>>和2>>分别以累加的方式将正确/错误的的数据输出到指定的文件或设备上。

15、管道命令(pipe)

管道命令“|”仅能处理通过前面一个命令传来的正确信息,也就是标准输出(stdout)的信息,对于标准错误,没有直接处理的能力。

常用的一些管道命令:

cut :将一段信息的某一段切出来,处理的信息以“行”为单位

grep:将需要的信息提取出来

sort:用于排序

uniq:去重

wc:统计行数、字数、字符数

tr:删除或替换字符

 

  • 正则表达式

1、什么是正则表达式(Regular Expression)

      正则表达式是一种字符串处理工具,利用它可以通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串。

2、常用命令

grep、sed、awk

 

  • 学习shell script

1、什么是shell script

      Shell script是针对shell所写的脚本程序,它的功能是将许多命令写在一起,让用户可以处理复杂的操作。

2、shell脚本一般由以下内容组成:

①第一行#!/bin/bash,用以声明这个文件内的语法使用bash的语法

②程序内容的说明,#后接批注,一般记录文件说明,作者,时间等

③主要环境变量的声明,如PATH

④主要程序部分

⑤告知执行结果,如exit 0

3、常用结构

①if…then

if  [ 判断语句一 ]; then

command

elif  [ 判断语句二 ]; then

command

else

command

fi

②case…esac

case  $变量  in

    “value1”)

     command

    ;;

   “value2”)

    command

    ;;

    “value3”)

     command

     ;;

         *)

     command

     ;;

esac

③while do done

while [ condition ]

do

         程序段

Done

④until do done

untill [ condition ]

do

         程序段

done

⑤for…do…done

for (( 初始值; 限制值; 执行步长 ))

do

         程序段

Done

⑥funtion

function fname() {

         程序段

}