shell简述以及shell中的变量

shell简述

shell功能

shell主要有两个功能,一个是命令解释器;另一个是作为高级程序设计语言可以编出代码简洁、功能强大的程序。

shell作为命令解释器的具体功能:它接收用户输入的命令,进行分析,创建子进程,由子进程实现命令所规定的功能,等子进程终止后,发出提示符。

shell作为一种高级程序设计语言,它几乎有高级语言所需要的所有元素,包括变量、关键字、各种控制语句等,还拥有自己的语法结构。shell有自己的编程语言,用于对命令的编辑,它允许用户编写由shell命令组成的程序

shell脚本的执行

  1. 脚本名作为shell参数的执行方法

    sh script-name
    

    或者

    bash script-name
    

    这种方法是脚本文件本身没有可执行权限时常用的方法,或者脚本文件开头没有指定解释器时需要使用的方法

  2. 修改为可执行权限的执行方法

    脚本在建立时,其访问权限和普通的文本文件一样,没有可执行的权限。先用 chmod 语句将脚本文件的可执行权限加上(文件执行权限为 x),然后在终端直接输入脚本名称的绝对路径或者相对路径就可以

    例如

    chmod a+x mytest
    ./mytest
    
  3. source 或者 “.” 命令
    基本语法格式如下:

	source script-name
	#或者
	. script-name

第一种和第二种方法都是在当前shell中新建一个子shell,在子shell中执行脚本语句,而source或者“.”(注意:“.”后边要加空格)的功能是直接在当前shell中读入脚本并执行脚本语句,而不是产生一个子shell来执行文件中的命令。

shell中的变量

shell常见修改和查看环境变量的命令

命令说明
echo显示某个环境变量值
export设置一个新的环境变量
env显示所有环境变量
set显示本地定义的shell变量
unset清除环境变量
readonly设置只读环境变量

shell的系统变量

系统变量说明
$0shell程序名
$1-$9第1~9个命令行参数的值
$*传递给脚本的所有参数,全部参数合为一个字符串
$#传递给脚本的参数个数
$$当前进程的进程ID
$?最后执行的一条命令的退出状态,返回值为0则成功;非0则失败
$!在后台运行的最后一个进程的进程ID

当命令行参数的个数大于 9 个时,可以使用shift指令将参数左移,获取第10个以后的参数。shift指令将所有参数左移1位,$2的值覆盖$1,$3的值覆盖$2,以此类推,$9的值被第10个参数覆盖。也可以使用 shift n 指令将所有的参数一次性向左移n位

例:

[root@localhost~]#cat exam
#!/bin/bash
#exam:shell script to demonstrate the shift command
echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
shift
echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
shift 4
echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
#end
[root@localhost~]#./exam A B C D E F G H I J K
exam A B C D E F G H I
exam B C D E F G H I J
exam F G H I J K

shell的用户自定义变量

用户自定义变量在shell脚本中使用,它们拥有临时的存储空间,在程序执行过程中其值可以改变,这些变量可以设置为只读,也可以被传递给定义它们的shell脚本中的命令。

用户自定义的变量shell变量名是由字母或下划线开头的字母、数字和下划线序列,并且大小写字母意义不同。使用等号将赋值给用户变量(在变量、等号和值之间不能出现空格)

(1)字符串赋值。其语法格式如下:

变量名=字符串

在程序中使用变量值时,要在变量名前边加上 “$”。这个符号告诉shell,要取出其后变量的值(“=”两边不能有空格)
例:用 echo命令显示变量值

[root@localhost~]#mydir=/home/a
[root@localhost~]#echo $mydir
/home/a	
[root@localhost~]##echo mydir
mydir

(2)当赋值给变量的值含有空格、制表符或者换行符时,要用双引号把这个字符串引起来

(3)在一个赋值语句中可以出现多个赋值,变量值可以迭代进行
例如: A=$b B=$C C=“Hello World”
相当于依次执行 A=$B,B=$C,C="Hello World"三条赋值语句

(4)变量值可以作为某个字符串中的一部分
例子:字符串引用实例

[root@localhost~]#s=world
[root@localhost~]#echo Hello&s
Helloworld

shell中变量的数学运算

shell中的变量都是字符串类型的,变量之间如需进行算数运算,必须使用exprlet 命令实现。shell 中支持常见的加(+)减(-)乘(\ *)除(/)取模(%)运算,需要注意的时,乘法的运算符是 \*,即转义字符 \ 和 * 放在一起表示乘法,这是因为shell中将 " * "默认为通配符使用

  1. expr命令
    [root@localhost~]#a=2
    [root@localhost~]#expr 8 + $a
    10
    [root@localhost~]#expr 6 * $a
    expr:语法错误
    [root@localhost~]#expr 6 \* $a
    12
    
    若要在shell脚本中获取expr命令的计算结果,需要将 expr 命令用倒引号(Esc下边的键)(" ` ")括起来
    例:
    [root@localhost~]#cat exam
    a=5
    b=`expr 3 + $a`
    echo "b=$b"
    exit 0
    [root@localhost~]#sh exam
    b=8
    
  2. let命令
    let命令可以进行算数运算,将算数表达式跟在 let 命令后边就可以实现数值的运算,其使用格式如下:
    [root@localhost~]#b=10
    [root@localhost~]#let c=5+$b
    [root@localhost~]#echo $c
    15
    
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值