[Note] Linu学习笔记7 shell编程基础

Note 7 Linux Shell编程基础

基本概念

shell脚本,一个shell程序,由可执行的shell命令组成,以普通linux文件形式保存
运行一个shell脚本的方法:

  1. chomd u+x scriptfile ./scriptfile

  2. /bin/bash scriptfile

shell变量,shell允许使用一些读写存储区,为用户和程序设计人员提供一个暂存数据的区域,分为环境变量和用户定义变量

环境变量用来定制shell运行环境,保证shell命令正确执行,所有环境变量会传递该shell的子进程
环境变量大多在/etc/profile文件中初始化,而profile是在用户登录时执行的。
用户可以在用户的~/.profile中给部分或全部环境变量赋值,或者在~/.bashrc,~/bash_log,~/.bash_profile中修改,它们在bash启动时执行
我们可以通过echo $变量名 来打印变量,具体的环境变量请自行查阅(set、env、declare、typeset、printecv等命令可以显示环境变量和其值)

用户变量在shell脚本汇总被用于临时的存储空间,一个没有初始化的变量自动被初始化为一个空串,用shell内嵌命令declare、local、set、typeset来初始化用户变量

程序流程控制命令,提供了对shell脚本中命令进行非顺序执行或循环执行的功能

变量相关

bash并不要求你一定声明变量,但是我们可以通过declare和typeset命令来声明变量,对变量初始化,并设定它们的属性,语法:

declare [options] [name[=value]]typeset [options] [name[=value]]

常用options:

  1. -a 每个name是一个数组

  2. -f 每个name是一个函数

  3. -i name是一个整数

  4. -r 给每个name标记上只读属性

  5. -x 表示每个name都可以被子进程访问到
    例如:

declare -i age=20declare -rx os=linux

注意:一个整型变量不能赋予非整型的值,非整型的变量可以被赋予任何值

变量读写
语法:varable=value $varable
例子:

myloc=/usr/testecho $mylocls $myloc

注意:(1)等号前后没有空格 (2)读取变量时前面加‘’$‘’

变量读取--命令替代操作符
以下varable代表变量名,string代表一个字符串

  1. $varable 返回变量的值,如果没有初始化则返回null

  2. ${varable} 返回变量的值,如果没有初始化则返回null,常用于数组变量

  3. ${varable:-string} 若变量存在且非空,返回变量的值,否则返回string的内容

  4. ${varable:=string} 若变量存在且非空,返回变量的值,否则把string赋给变量并返回

  5. ${varable:?string} 若变量存在且非空,返回变量的值,否则显示字符串‘'varable:'和string

  6. ${varable:+string} 若变量存在且非空,返回string的值,否则返回null

例程:

$echo $name     # name is null                # this is space           $name=xiaoming  $echo $name     xiaoming$echo ${name:-john} ${place:=varIsNull}xiaoming varIsNull$echo ${place:?"not defined."}bash: place: not defined.$echo ${name:+defined}defined$echo ${place:+"not defined"}$echo ${place:="hz"}hz

*符号"" '' 的使用*
使用双引号将值括起来,则允许使用$符号对变量进行替换,但对大多数的元字符(包括
)都将按字面意思处理
使用单引号将值括起来,则不允许使用变量替换,并不对它进行shell解释
使用反斜杠去除字符的特殊含义,并把它们按字面意思处理,比如$

命令替换
当一个字符串被包含在一堆括号里,并在前面加$符号,或者被包含在反引号 中,则该字符串被作为命令执行,并用命令的执行结果替换这个字符串本身。 语法:$(command)command`

定义全局变量

declare -x[name-list]
typedef -x[name-list]
export [name-list]

以上命令把name-list中的变量名字和它们的值扩展到之后每一个命令里
例如:

$declare -x name=global

重设变量
unset [name-list]
将name-list中的变量重设为null
例如:

unset name place

注意:不能重设只读变量的值

shell脚本

读入参数

1.从标准输入设备读入变量
read [options] var-list
用途:从标准输入设备读入一行,将读入的词存入var-list变量中,读入的一行输入由多个词组成,中间由空格或tab分隔。如果这些词的数量比列出的变量多,那么将余下的所有词赋值给最后一个变量,反之,设为null

2.直接传递给shell脚本
在运行脚本时,在脚本名之后直接输入参数
例如:$bash scriptfile val1 val2 val3
这些变量的前9个存放在shell变量$1 到 $9中,可以使用shift [N]命令把参数化向左移动N个位置
$# 变量包含了传递的参数的个数
$* 和 $@ 都包含了所有参数的值,他们的区别在于,当被引号包括时,$@把每个参数的值作为一个字符串,而不是把所有参数的值作为一个字符串
$0包含了脚本文件的名字

3.set命令
可以使用set命令将值存到位置参数里
例如:

$set $(date)$echo "$@"Thu July 20 21:33:09 PST 2016

date命令的输出有6个域,被存到$1到$6之中

程序流程控制语句

推荐一个写的不错的博客
http://blog.chinaunix.net/uid-25932176-id-2973818.html

关键字:linux

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部