Shell学习笔记

  好早就想学习Shell,奈何太懒,想学的又太多,像Java,C++,QT...今天起,每天晚上都学点Shell编程,把学习的都写下来,当作记录,也算是督促自己的一种方法。


 

Shell的基本元素

  Shell脚本一般第一行为 #! /bin/sh ,为什么呢?大致是,当Shell要求内核执行时,会返回不可执行的信息(因为是脚本程序),Shell捕捉到该信息后,会启动一个Shell副本来执行它,那是启动哪一个Shell呢,这就是 #! /bin/sh 的作用了。比如csh: #! /bin/csh -f  , awk程序: #! /bin/awk -f (后边会学到awk),一个简单的Shell程序(除了此例,别的都省略写):

#! /bin/sh
who | wc -l

  Linux下的命令,以;分隔(和C语言类似),依次执行。如 a;b 即a执行后执行b,而 a&b ,是a命令在后台执行,同时执行b命令。Shell识别3种形式的命令:1.系统内建命令,如:cd,echo等;2.由1构成的Shell脚本;3.将2形成的脚本放在环境变量路径下,直接打命令就可执行。给LInux环境变量增加地址:

cd
mkdir bin
PATH=$PATH:$HOME/bin

 

Shell下的变量

  Shell下的变量,不需要声明(默认是字符串?),比如:

var=HelloWorld
echo $var

  显示结果是:HelloWorld。赋值过程有空格,就需要加上引号了:

var1="Hello World" var2="ni hao"
var="$var1 $var2"
echo $var

  echo也能用于输出

echo test echo 

  输出:test echo,接在echo行后面的字符,都会输出,输出结束后自动换行,echo -n 则不换行。

\b  退格       \r   回车
\t   制表符    \n  换行

  printf的输出,与C语言下的类似

printf "Hello World %s,%s" ni hao

  输出:Hello World ni,hao


 

基本的I/O重定向

  < 文件读入数据,>输入到文件,>> 输出到文件末尾后。

tr -d '\r' < a.txt > b.txt

 

代码从左往右执行,删除a.txt种的回车键,输出到b.txt中。管道|:左边的输出当作右边的输入。

  Linux下有两个特殊的文件:/dev/null和/dev/tty。/dev/null用来获得命令的运行结果,比如一个文件是否包含某个字符串,用grep命令,又不许要查找的结果,就可以把输出的结果指向/dev/null;/dev/tty当被程序打开时,会自动重定向到一个终端(一个实体控制台,串行端口等),不理解看下边的代码

printf "Enter new password:"
stty -echo   //关闭自动打印输入字符的功能
read pass < /dev/tty
printf "Enter again"
read pass2 < /dev/tty
stty echo  //恢复功能

 

访问参数和执行追踪

  执行一个Shell脚本,传参是必须的有时候。比如

echo first arg is $1
echo second arg is ${10}

 

第10个参数开始,需要加{}。执行语句是 ./shellName arg.

  执行追踪,类似Debug,单个显示执行的语句和信息。

#! /bin/sh
set -x
echo 1st echo
set +x
echo 2nd echo

 

set -x 打开debug功能,这句话不会显示出来。set +x 关闭功能,显示出这句话后,debug功能关闭。


 

这篇Blog,基本是边看书边记录下来的,零零碎碎地写了这么多,发现看书的效率不高,因为要边看,边总结,边写,想想这样也不怎么好,先认真地看一遍,笔记都记下来了,第二遍看的时候,就可以写写博客了。这样,提高了效率,也使文章不会这么凌乱,呵呵。 

 

 

posted @ 2013-07-23 00:00  长溪  阅读(192)  评论(0编辑  收藏  举报