首页 > 其他 > 详细

小试牛刀

时间:2014-03-18 00:48:22      阅读:423      评论:0      收藏:0      [点我收藏+]

什么是shell?

  

什么是脚本?

  就是一些文件,我们能将一系列需要执行的命令写入其中,然后通过shell来执行这些脚本。通常使用某种基于解释其的编程语言。

一般shell脚本是以一个#!为开头的文本文件,如#!/bin/bash,/bin/bash是bash的路径。运行脚本文件方式如下:

  $ sh script.sh  或者 # sh script.sh  #该命令行默认该脚本在该目录下,也可以使用以“./” 或“/”开头的相对路径和绝对路径表示方式

区别在于,前者$代表普通权限用户,#代表root权限用户。后半部分以#开始,代表注释。

 

对shell脚本有了初步认识后,开始正式进入shell脚本正文。

1.终端打印

  $echo 要打印的字符串

  echo后面有三种方式:

    1,echo welcom to bash

    2,echo ‘welcom to bash‘

    3,echo "welcom to bash"

  一般三种方式都可以,但略有些差别。

    1,脚本中,以echo hello为例,echo hello将被作为一个命令行处理,同时hello也会被作为一个命令行处理,但是第二种加单引号就不会有这种情况,‘hello’只会被  作为一个字符串打印出来

    2,双引号中,要注意用转意符‘\’显示一些有特殊意义的符号

  $printf "要打印的字符串"  #可以打印含有格式信息的字符串

2.环境变量

  设置变量:var=value 或者 var="value",区别在于前者写法不能有空格,否则两种方式是一样的

  读取变量值:$var 或者 ${var}

    export命令用来设置环境变量,从当前shell脚本执行的任何程序都会继承这个变量。如 $ export PATH="$PATH:/home/user/bin",这样就把/home/user/bin添加到了  PATH中

  变量长度:length=${#var}

  使用$ echo $SHELL可以知道当前所使用的shell版本

3.通过shell进行数学运算

  可以利用let、(( ))和[]执行基本的算数操作。高级操作的话,有expr和br两个工具可以使用。

  从let的含义就可以知道其作用了,放在一个数学表达式的开始,如

  $no1 = 4; no2 = 5;

  $let result = no1 + no2 ,或者 $ result = $[no1 + no2],或者 $result = $((no1 + no2))  #前面必须要加"$",因为否则就不是赋数值了

4.文件描述附,重定向

  0---stdin

  1---stdout

  2---stderr

  ">"可以把左边输出内容重定向到右边的流中,文本的话是以覆盖形式。与之对应,“>>”则是一种追加的形式。

  在命令行中,可以同时写“1>”和“2>”,前者是标准输出,后者是错误输出,这样就可以把标准输出跟错误输出分别保存到两个文本中。

  另一个相关的命令是tee,它可以既把输出信息输出到一个文件里,同时把该信息做一个拷贝,然后作为后续命令的stdin使用,需要配合管道“|”使用,具体用法此处略去。

  自定义文件描述符:选择一个不小于3的数字与>、>>、<、<<结合,后跟一个输入/输出文件名。

5.数组和关联数组

  普通数组:只能使用整数作为索引

  array_var=(1 2 3 4 5 6),可以像array_var[0]="test0"的方式读取

  关联数组:可以使用字符串作为索引,相当与一个{key, value}的map

  $ declare -A ass_array          #将一个变量名声明为关联数组

  $ ass_array=([index1]=val1  [index2]=val2)  #index1,index2是字符串索引

6.使用别名

  别名,顾名思义了。

  直接举例:$alias new_command=‘original command sequence‘,这样就可以只用new_command来代替original command sequence来执行了

  安全问题:$ \command,忽略当前定义过的所有别名,运行原本的命令,以防某些特权命令被别有用心的利用别名替换掉了。

7.获取终端信息

  有两个工具:tput,stty可以手机、处理终端设置,具体用法此处省略。

8.获取、设置日期和延时

  读取日期:$date

  打印纪元时:date +%s

  有一些输出格式,%a,A,b,B,d,D,y,Y,I,M,S,N,s,具体含义在此就不一一列举了,用到时可以查询。

  打印时间:$ date "+%d %B %Y"

  设置时间:$date -s "格式化的日期字符"

9.调试脚本

  几个选项:

    -x:执行时显示参数和命令

    +x:禁止调试

    -v:当命令进行读取时显示输入

    +v:禁止打印输入

10.函数和参数

  定义函数:function关键字可有可无

  function fname()  #函数体内可以使用$1...$n等表示第几个传进的参数

  {

  statements;

  }

  使用:$fname arg1 arg2;   #执行函数,也可以进行传参

11.以不按回车键方式读取字符“n”

  read命令提供了一种不需要按回车键就能搞定这个任务的方法。注:因为一般键盘输入都是以回车符作为结束的标志,但有时候是无法提供回车符的,或者很不方便。

12.循环、条件指令

  for var in list

  do

  commands;

  done

  或者

  for((i=0;i<10;i++))

  {

  commands;

  }

  until[条件]

  if condition

    then

    commands

  elif condition

    then

    commands

  else

    commands

  fi

细节还有很多,在此就省略了。

小试牛刀,布布扣,bubuko.com

小试牛刀

原文:http://www.cnblogs.com/boole/p/3605568.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!