作者: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. OpenCV 官方工程报错(1) Couldn't load mixed_sample from loader

    openCV/OpenCV-android-sdk/samples/tutorial-2-mixedprocessing 工程 - ::): Trying to get library list - ...

  2. MyBatis总结四:配置文件xml详解

    XML 映射配置文件 MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息.文档的顶层结构如下: configuration 配置 ...

  3. POJ 1187 陨石的秘密 (线性DP)

    题意: 公元11380年,一颗巨大的陨石坠落在南极.于是,灾难降临了,地球上出现了一系列反常的现象.当人们焦急万分的时候,一支中国科学家组成的南极考察队赶到了出事地点.经过一番侦察,科学家们发现陨石上 ...

  4. python 删除正在for循环遍历的list正确做法

    先放一个python遍历发生的异常: ls =[1,2,3,4,5,6,7,8,9] for i in ls: print("i",i) print("ls", ...

  5. Entity Framework Code-First(22):Code-based Migration

    Code-based Migration: Code-based migration is useful when you want more control on the migration, i. ...

  6. bit byte的关系

    字 word 字节 byte 位 bit 字长是指字的长度 1字=2字节(1 word = 2 byte) 1字节=8位(1 byte = 8bit)  一个字的字长为2个字节=2*8=16 一个字节 ...

  7. jQuery 插件开发——countdown(倒计时)

    故事背景:按照惯例,先写下故事背景,其实也是再次汇报下最近开发情况的.做电商的都知道,这是个活动季啊,双十一.双十二.元旦....各种啊..其实说这么多就是想表达最近比较忙.呵呵^_^,正好今天抽点空 ...

  8. android studio中退出时弹出对话框

    在app中总是不小心点击了退出怎么办?当然是加个弹出的提示框了,本人新手,就加在主界面上了 @Override public boolean onKeyDown(int keyCode, KeyEve ...

  9. symbol访问法及symbor注册表

    symbol主要作用是防止对象属性名冲突 在ES6之前,对象的属性名只能是字符串,这样很容易造成字符串的冲突. 例:假设person对象是从外部库引入的一个对象 let person = { name ...

  10. CSS预处理器(SASS和LESS)

    Sass框架应用Sass简介 Sass又名SCSS,是CSS预处理器之一,它能让你更好更轻松的工作.Sass官网是这样描述Sass的:**Sass是一门高于CSS的元语言,能用来清晰的.结构化地描述文 ...