Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4481008
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: Python/Ruby

2011-01-18 08:45:22

命令:
1. ls ~ywx

2. Ctrl+i tab键 高级bash脚本编程指南 p39

@1变量


1.在shell中,使用变量之前不需要对它们进行声明
2.在默认的情况下,所有变量被看作字符串并以字符串来储存,即使它们被赋值为数值时。
3.shell和一些工具程序会在需要的时把数值型字符串转换为对应的数值以进行操作。
4.linux 是一个区分大小写的系统

在shell中,你可以通过在变量前加一个$来访问他的内容。
例如:通过设置和检查变量salutation的不同值来实际查看变量的使用



注意:
1.如果字符串中包含空格,就必须用引号把它们括起来。此外,等号两边不能有空格

2在salutation=7+5时,当显示的时候,还是7+5,没有显示处12,这只是变量的赋值


read命令

      你可以使用read命令将用户的输入赋值给一个变量。
      这个命令需要一个参数,即准备读入用户输入数据的变量名,然后他会等待用户输入数据。
      通常情况下,在用户按下回车键是,read命令结束
      当从终端上读取一个变量时,你一般不需要使用引号
例:




使用引号
      一般情况下,脚本文件的参数以空白字符分隔。如果你想在一个参数中包含一个或多个空白字符,你就必须
给参数加上引号。

1.把一个$变量表达式放在双引号中,把变量替换为他的值
2.                                     单引号    ,不会替换
3.在$字符之前加上一个   \    字符以取消它的特殊含义

例如:
  1. #!/bin/sh
  2. myavr="hi there"

  3. echo $myavr
  4. echo "$myavr"
  5. echo '$myavr'
  6. echo \$myavr

  7. echo enter some text
  8. read myavr

  9. echo '$myavr' now equals $myavr
  10. exit 0





环境变量
shell脚本程序开始执行时,一些变量会根据环境设置中的值进行初始化。
$HOME        当前/用户的家目录
$PATH         以冒号分隔的用来搜索命令的目录列表
$PS1          
$PS2
$IFS        输入域分隔符。当shell读取输入时,它给出用来分隔单位的一组字符,它们通常是空格 制表符 换行符
$0          shell脚本的名字
$#           传递给shell脚本的参数个数
$$           shell脚本的进程号,脚本程序通常会用它来生成一个唯一的临时文件,如/tmp/tmpfile_$$

参数变量
$1 $2    脚本程序的参数
$*          在一个变量中列出了所有的参数,各个参数之间用环境变量IFS中的第一个字符分隔开。如果IFS
             被修改了,那么$*将命令行分割为参数的方式就将随之改变
$@        他是&*的一种精巧的变体,他不使用IFS环境变量,所以即使IFS为空,参数也不会挤在一起

看出$* $@的区别




当改变 IFS=‘     ’  引号内有5个空格,但是$*  IFS的第一个字符分隔开




实验:使用参数和环境变量
      这个脚本程序创建变量salutation并显示它的内容,然后显示各种参数变量以及环境变量$HOME都已存在并有了适合的值
  1. #!/bin/sh

  2. salutation="hello"

  3. echo $salutation
  4. echo "the program $0 is now running" #脚本的名称
  5. echo "the second parameter was $2" #第二个参数
  6. echo "the firsrt paramenter was $1"
  7. echo "the parameter list was $*" #参数列表
  8. echo "the uwer's hhome directory is $HOME" #当前用户的家目录

  9. echo "please enter a new greeting"
  10. read salutation #赋值时,不需要 $

  11. echo $salutation
  12. echo "the script is now completing"
  13. exit 0



()命令组

注意:在()中的命令列表,将作为一个子shell来运行。在()中的变量,由于是在子shell中,所以对于剩下的部分是不可用的

  1. ywx@ywx:~/desktop/linux_shell$ b=123
  2. ywx@ywx:~/desktop/linux_shell$ echo "b=$b"
  3. b=123
  4. ywx@ywx:~/desktop/linux_shell$ (b=321)
  5. ywx@ywx:~/desktop/linux_shell$ echo "b=$b"
  6. b=123
  7. #在圆括号中b变量,更像是一个局部变量

{}

  1. ywx@ywx:~/desktop/linux_shell$ cp file.{txt,bak}
  2. ywx@ywx:~/desktop/linux_shell$ ls
  3. file.bak file.txt
{}代码块,又被称为内部组,事实上,这个结果创建了一个匿名的函数,但是与函数不同的是,在其中声明的变量,对于脚本其他部分的代码来说还是可见的,


  1. #!/bin/bash

  2. a=123
  3. {
  4. a=321;
  5. }
  6. echo "a=$a" # a = 321 (说明在代码块中对变量a所作的修改,影响了外边的变量a)
  1. ywx@ywx:~/Desktop/linux_shell$ ./tst.sh
  2. a=321


ls ~ywx

~ home目录。相当于$HMOE变量 ~ywx是ywx的home目录
  1. ywx@ywx:~/desktop/linux_shell$ ls ~ywx
  2. desktop Documents examples.desktop Pictures Templates
  3. Desktop Downloads Music Public Videos















阅读(2137) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~