作者:KornLee 2005-02-03 15:32:57 来自:Linux先生

 

 1.建立和运行shell程序

  什么是shell程序呢? 简单的说shell程序就是一个包含若干行

shell或者linux命令的文件.

象编写高级语言的程序一样,编写一个shell程序需要一个文本编辑器.如VI等.

在文本编辑环境下,依据shell的语法规则,输入一些shell/linux命令行,形成一个完整

的程序文件.

  执行shell程序文件有三种方法

  (1)#chmod +x file(在/etc/profile中,加入export PATH=${PATH}:~/yourpath,就可以在命令行下直接运行,像执行普通命令一样)

  (2)#sh file

  (3)# . file

  (4)#source file

在编写shell时,第一行一定要指明系统需要那种shell解释你的shell程序,如:#! /bin/bash,

#! /bin/csh,/bin/tcsh,还是#! /bin/pdksh .

2.shell中的变量

  (1)常用系统变量

     $ #        :保存程序命令行参数的数目

     $ ?        :保存前一个命令的返回码

     $ 0        :保存程序名

     $ *        :以("$1 $2...")的形式保存所有输入的命令行参数

     $ @        :以("$1""$2"...)的形式保存所有输入的命令行参数

  (2)定义变量

   shell语言是非类型的解释型语言,不象用C++/JAVA语言编程时需要事先声明变量.给一

个变量赋值,实际上就是定义了变量.

   在linux支持的所有shell中,都可以用赋值符号(=)为变量赋值.

如:

  abc=9  (bash/pdksh不能在等号两侧留下空格 )

  set abc = 9 (tcsh/csh)

   由于shell程序的变量是无类型的,所以用户可以使用同一个变量时而存放字符时而存放

整数.

如:

  name=abc  (bash/pdksh)

  set name = abc (tcsh)

  在变量赋值之后,只需在变量前面加一个$去引用.

如:

  echo $abc

  (3)位置变量

  当运行一个支持多个命令行参数的shell程序时,这些变量的值将分别存放在位置变量里.

其中第一个参数存放在位置变量1,第二个参数存放在位置变量2,依次类推...,shell保留

这些变量,不允许用户以令外的方式定义他们.同别的变量,用$符号引用他们.

3.shell中引号的使用方法
  shell使用引号(单引号/双引号)和反斜线("\")用于向shell解释器屏蔽一些特殊字符.
反引号(")对shell则有特殊意义.
如:
 abc="how are you"  (bash/pdksh)
  set abc = "how are you"  (tcsh)
这个命令行把三个单词组成的字符串how are you作为一个整体赋值给变量abc.
  abc1='@LOGNAME,how are you!' (bash/pdksh)
  set abc1='$LOGNAME,how are you!' (tcsh)
  abc2="$LOGNAME,how are you!" (bash/pdksh)
  set abc2="$LOGNAME,how are you!" (tcsh)
LOGNAME变量是保存当前用户名的shell变量,假设他的当前值是:wang.执行完两条命令后,
abc1的内容是:$LOGNAME, how are you!.而abc2的内容是;wang, how are you!.
象单引号一样,反斜线也能屏蔽所有特殊字符.但是他一次只能屏蔽一个字符.而不能屏蔽
一组字符.
反引号的功能不同于以上的三种符号.他不具有屏蔽特殊字符的功能.但是可以通过他将
一个命令的运行结果传递给另外一个命令.
如:
  contents=`ls` (bash/pdksh)
  set contents = `ls` (tcsh)
4.shell程序中的test命令
  在bash/pdksh中,命令test用于计算一个条件表达式的值.他们经常在条件语句和循环
语句中被用来判断某些条件是否满足.
test命令的语法格式:
  test expression
  或者
  [expression]
在test命令中,可以使用很多shell的内部操作符.这些操作符介绍如下:
(1)字符串操作符  用于计算字符串表达式
  test命令    |    含义
  -----------------------------------------
  Str1 = str2 | 当str1与str2相同时,返回True
  Str1! = str2| 当str1与str2不同时,返回True
     Str      | 当str不是空字符时,返回True
    -n str    | 当str的长度大于0时,返回True
    -z str    | 当str的长度是0时,返回True
  -----------------------------------------
  (2)整数操作符具有和字符操作符类似的功能.只是他们的操作是针对整数
  test表达式   |    含义
  ---------------------------------------------
  Int1 -eq int2|当int1等于int2时,返回True
  Int1 -ge int2|当int1大于/等于int2时,返回True
  Int1 -le int2|当int1小于/等于int2时,返回True
  Int1 -gt int2|当int1大于int2时,返回True
  Int1 -ne int2|当int1不等于int2时,返回True
  -----------------------------------------
  (3)用于文件操作的操作符,他们能检查:文件是否存在,文件类型等
  test表达式   |    含义
  ------------------------------------------------
  -d file      |当file是一个目录时,返回 True
  -f file      |当file是一个普通文件时,返回 True
  -r file      |当file是一个刻读文件时,返回 True
  -s file      |当file文件长度大于0时,返回 True
  -w file      |当file是一个可写文件时,返回 True
  -x file      |当file是一个可执行文件时,返回 True
  ------------------------------------------------
 (4)shell的逻辑操作符用于修饰/连接包含整数,字符串,文件操作符的表达式
  test表达式    |    含义
  ----------------------------------------------------------
  ! expr        |当expr的值是False时,返回True
  Expr1 -a expr2|当expr1,expr2值同为True时,返回True
  Expr1 -o expr2|当expr1,expr2的值至少有一个为True时,返回True
  -----------------------------------------------------------
注意:
tcsh shell 不使用test命令,但是tcsh中的表达式同样能承担相同的功能.tcsh
支持的表达式于C中的表达式相同.通常使用在if和while命令中.
  tcsh表达式    |    含义
  -------------------------------------------------------
  Int1 <= int2  |当int1小于/等于int2时,返回True
  Int1 >= int2  |当int1大于/等于int2时,返回True
  Int1 < int2   |当int1小于int2时,返回True
  Int1 > int2   |当int1大于int2时,返回True
  Str1 == str2  |当str1与str2相同时,返回True
  Str1 != str2  |当str1与str2不同时,返回True
  -r file       |当file是一个可读文件时,返回True
  -w file       |当file是一个可写文件时,返回True
  -x file       |当file是一个可执行文件时,返回True
  -e file       |当file存在时,返回True
  -o file       |当file文件的所有者是当前用户时,返回True
  -z file       |当file长度为0时,返回True
  -f file       |当file是一个普通文件时,返回True
  -d file       |当file是一个目录时,返回True
  Exp1 || exp2  |当exp1和exp2的值至少一个为True时,返回True
  Exp1 && exp2  |当exp1和exp2的值同为True时,返回True
  ! exp         |当exp的值为False时,返回True
  -------------------------------------------------------

shell入门基础必备的更多相关文章

  1. Linux shell入门基础(六)

    六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行 ...

  2. Linux shell入门基础(一)

    Linux shell入门基础(一): 01.增加删除用户: #useradd byf   userdel byf(主目录未删除)  userdel -r byf   该用户的属性:usermod 用 ...

  3. Linux shell入门基础(八)

    八.shell脚本sed&awk 01.sed的使用 流编辑器-Steam Editor #ed /etc/passwd 1,10p …… 1s/root/byf/p(替换root为byf) ...

  4. Linux shell入门基础(二)

    二.shell对文本的操作 01.查看文本的命令 #cat /etc/passwd(并非对文本文件操作) #tail -5 /etc/passwd(查看末尾5行) #tail -f /var/log/ ...

  5. shell 入门基础

    一. Shell变量 1. 变量可分为两类: 环境变量(全局变量) 和 局部变量 . 环境变量 : 所有的环境变量都是系统全局变量,可用于所有子进程中,这包括编辑器.shell脚本和各类应用 . 环境 ...

  6. shell入门基础&常见命令及用法

    shell shell是一个命令解释器,实际是一个程序,/bin/bash,linux中所有的命令都由它来解释,有自己的语法 shell脚本 以.sh结尾 shell语法+linux命令 注释: 单行 ...

  7. Shell入门基础

    Shell的Helloworld #!/bin/bash echo "helloworld taosir" 执行方式 方式一:用 bash 或 sh 的相对或绝对路径(不用赋予脚本 ...

  8. Linux shell入门基础(七)

    七.bash脚本中的流程控制   条件判断控制   -[]([]中的表达式是否为真)  &&(前边的结果是true的时候执行后边的命令)   ||(前边的结果是false的时候执行后边 ...

  9. Linux shell入门基础(五)

    五.bash运算及启动脚本 01.使用bash的命令历史 #history …… #set(显示所有的变量) | grep HIS HISTFILE=/root/.bash_history HISTF ...

随机推荐

  1. IDEA创建的Maven项目中 解决编写pom.xml没有提示

    问题如下 没有提示信息 解决方案 把Repositories中的配置更新成本地仓库 问题解决

  2. 第2章 构建springboot工程 2-2 使用Spring官方STS搭建SpringBoot工程

    项目名demo,SpringBoot的版本2.0.6 删了/demo/mvnw和/demo/mvnw.cmd.static文件夹包含静态文件,比如CSS.JS.templates文件夹是放模板的,Sp ...

  3. SQL查询语句 [1]

    一.使用字符串作为条件查询 在 Home/controller/UserController.class.php 下插入 <?php namespace Home\Controller; use ...

  4. 面试题: java面试经历 已看1 抢红包如何分配每个人抢到的钱 有用 难点的面试题

    2018.03.09 深圳乐唯科技 我看了下感觉这公司貌似挺不错的,面试官人也挺好的,氛围应该很不错,可惜我实力不足,唉,接续努力,下面把面试中印象较深的三个问题写一下. 面试问题1:数据库删除重复数 ...

  5. p3584 [POI2015]LAS

    传送门 分析 f[i][S](S∈[0,4])表示第iii个食物没有被选/左边选/右边选/同时选的状态是由哪一个状态转移来的 我们需要满足两个条件: 每个人只能选择一个  改变选择之后不会比当前获得热 ...

  6. 浅谈assert()函数的用法

    #include<stdio.h> #include<assert.h> char * Strcpy(char *dst,const char *src) { assert(d ...

  7. Linux中创建和使用静态库&动态库

    库本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行 Linux下库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同. 静态库的代码在 ...

  8. SQLite操作

    创建有主键的表: create table test (pkey varchar(16) primary key, value varchar(10)); 创建有复合(即key由多个字段联合组成)主键 ...

  9. 使用JMeter的Java Sampler轻松定制自己的benchmark

    做性能测试,接口测试,非常好 转自  http://www.iteye.com/topic/1123432 以前碰到更多的是WEB APP的性能测试,也许用得最多的是Loadrunner, Web S ...

  10. [转]Passing Managed Structures With Strings To Unmanaged Code Part 2

    1. Introduction. 1.1 In part 1 of this series of blogs we studied how to pass a managed structure (w ...