jasmine214--love

只有当你的内心总是充满快乐、美好的愿望和宁静时,你才能拥有强壮的体魄和明朗、快乐或者宁静的面容。
posts - 731, comments - 60, trackbacks - 0, articles - 0

shell 基础知识整理

Posted on 2010-11-27 09:45 幻海蓝梦 阅读(428) 评论(0)  编辑  收藏 所属分类: Linux

1.     环境变量,相当于全局变量。

定义变量;打印变量; 将自定义变量转成环境变量;显示所有环境变量;取消某个or多个环境变量or 本地变量;一个命令把自定义变量转成环境变量;显式所有本地变量;本地变量设成只读,即不可写; env 结合grep的管道命令用来显示希望查看的某个环境变量。

$ name=kiki

$ echo $(name)  or   $ echo ${age}  or  $echo $name

$ export name

$ env

$ unset name  age

$ export name="kiki"

$ set

$ readonly age="83"

$ env | grep HOME

 

2.     环境变量配置文件,包含/etc/profile~/.bashrc文件。

1/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。

2~/.bashrc:该文件包含专用于你的bash shellbash信息,当登录时以及每次打开新的shell,该该文件被读取。

3)最常用的环境变量PATH

比如:修改环境变量,把交叉编译器的路径加入到PATH。在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称的时候出现“command not found”的提示内容。如果每次都到安装目标文件夹内找到可执行文件来进行操作就太繁琐了,这就涉及到环境变量PATH的设置问题,而PATH的设置也是LINUX下定制环境变量的一个组成部分。

    $ echo $PATH

/opt/fp_le/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/wangzhonghua/bin

$ echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

$ echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

 

3.     /etc/profile文件的shell思想

1)     特殊变量:$0 脚本名;$n  给脚本传递的参数;$?  命令的执行结果;

2)     比较控制符:真假[-eq  ]   –eq,-neq, -ge,-gt,-le,-lt; 可以比较某个变量和某个值[ !=  ][ = ];也可以比较是否是目录,还可以比较文件:空串[ -z ],and[ -a ],执行[  -x   ]某个文件可执行-x, 是否link [ -l ];是否只读[ -r ];(1. w是否是空串,w是否可执行。2.-f 表示正规文件,-w表示可写。

3)     当前用户的识别号:id –ru (real user);当前用户的姓名 id –un; 当前用户的名字:hostname;当前用户是谁及何时登陆的:who am i

If条件表达式与 [  ]&& 有相同的功能,但是&&只能达到一半的条件。

If [    ]; then

else

fi

4)     shell的函数: 函数名(){},不需要提供参数,在执行函数的时候提供参数即可。

5)     管道| 与重定向 有追加和覆盖两种 >,>> :把一个命令的输出作为另一个命令的输入。重定向有标准输出和标准错误输出两种。

wiki@wiki-desktop:/home/xufuli/backup/svnsync$ ll >kiki

-bash: ll:找不到命令

 

$ ll >kiki 2>&1

 

6)     转义序列: \n换行;\t调一个tab键。(),[]需要转义的。

~$ last | awk '{print $1 "\n" $3}'

    7)定制shell环境

        $ shopt -s cdspell,自动纠正cd 拼写错误。

        Checkwinsizebash在每个命令后检查窗口大小,如果有必要,就更新LINESCOLUMNS的值;

        Histappend;当shell退出时,历史清单将添加到以HISTFILE变量的值命名的文件中,而不是覆盖文件

 

    8eval 替换命令:然而当在它前面放上eval时,其结果是shell在执行命令行之前扫描它两次。

    9) alias :命令别名,

        $ alias ll='ls -al'

    8linux特殊文件:/dev/null, linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。这一点非常有用,当我们不需要回显程序的 所有信息时,就可以将输出重定向到/dev/null。用来使终端不显示任何信息。

    9case  条件语句的用法 以及脚本执行的追踪 –n检查语法问题;-vshow出脚本再执行;-x 跟踪执行每一步:

        #!/bin/bash

  2

  3 case  $1 in

  4 "spring") echo "in spring";;

  5 "summer") echo "in summer";;

  6 "winter") echo "in winter";;

  7 esac

7)     awk编程的了解,awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在 这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。awk分别 代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred AhoBrian KernighanPeter Weinberger

$ awk '{print $2;}' testfile 表示打印每一行的第二列,自动变量$1$2分别表示第 一列、第二列等,类似于Shell脚本的位置参数,而$0表示整个当前行。

 

 

4.     变量整数声明

$ declare -i sum=100+50

$ echo $sum

 

5.     过滤器

1)     管道过滤器:编译器就是基于管道过滤器模式设计的:

输入:源程序
预处理:负责宏展开和去掉注释等工作。
编译:进行词法分析、语法分析、语义分析、代码优化和代码产生。
汇编:负责把汇编代码转换成机器指令,生成目标文件。
链接:负责把多个目标文件、静态库和共享库链接成可执行文件/共享库。
输出:可执行文件/共享库。

 

2)     复合过滤器







sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为模式空间pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

$ sed '2,$d' example    删除example文件的第二行到末尾所有行

$ sed 's/test/mytest/g' example 文件中所有都替换在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest

$ sed -e '1,5d' -e 's/test/check/' example      (-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除15行,第二条命令用check替换test。命令的执 行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。

@sed -i 's/\[SVN_VER\]/$(SVN_REVISION)/g'  $(ONU_INSTALL)/version 在指定文件中当前行前插入一行,此行的内容用某某替换某某。

   

6.     数组,set显示的所有变量中是这样的,season=([1]="spring" [2]="summer") ;打印数组变量值

$ season[1]=spring

$ season[2]=summer

$ echo ${season[1]}

 

7.     history 历史命令,显示最近100条命令;清除所有历史命令;

$ history 100

$ history –c

 

8.     打印输出。转义字符使能输出-e,推荐用双引号保持变量特性;

$ echo -e  " kiki \n mina"

 

9.     打包(音译) tar文件 tarball

@tar -jcvf $(ONU_FIRMWARE_BIN)-$(SVN_REVISION).$@.tar.bz2 $(ONU_FIRMWARE_BIN)-$(SVN_REVISION).$@.bin $(ONU_FIRMWARE_BIN)-$(SVN_REVISION).$@.bin.upf  j参数代表是以.tar.bz2作为扩展名

@tar -cf $(ONU_FIRMWARE_BIN)-$(SVN_REVISION).$@.bin.tar $(ONU_FIRMWARE_BIN)-$(SVN_REVISION).$@.bin.upf Lib/images/App4315.tkf Lib/images/Pers4315.tkf  不用j,z,参数的代表是以.tar作为扩展名

 

 

10.  shell 查找技巧:find xargs(参数替换) 用来删除所有某种特点的文件。

$ find -name "xufuli" | xargs rm –rf  通过管道将find的结果作为输入,通过xargs作为rm命令的参数

11.  更改权限;

$chmod a+x  kiki.sh 

12.  Makefilesed的使用

@sed -i 's/\[SVN_VER\]/$(SVN_REVISION)/g'  $(ONU_INSTALL)/version 在指定文件中当前行前插入一行,此行的内容用某某替换某某。

 

13.  文件测试功能file: $ file nullLog.sh用来测试文件是否是可执行文件。可执行文件是指二进制文件。

14.   

15.  Makefile中一些极好的shell命令

$ sudo rm -rf country/           删除父子所有文件夹目录

$ sudo cp -rf xufuli/  kiki/     完整拷贝目录结构到另一个文件夹

$ find -name "xufuli" | xargs rm –rf        在当前目录查找名为xufuli的目录和文件,通过管道将find的结果作为输入,通过xargs作为rm命令的参数

$chmod a+x  kiki.sh              更改权限

$chmod 755 $(ROOTFS_PATH)/home/www/html_asb/cgi-bin/*

@sed -i 's/\[SVN_VER\]/$(SVN_REVISION)/g'  $(ONU_INSTALL)/version 在指定文件中当前行前插入一行,此行的内容用某某替换某某。

 


只有注册用户登录后才能发表评论。


网站导航: