shell脚本编程讲解2

自定义环境变量(全局变量)

设置环境变量

如果想设置环境变量,就要在给变量赋值之后或设置变量时使用export命令,带-x选项的declare

内置命令也可可以同样完成功能(注意:输出变量时不要在变量名前面加$)

格式:

①export
变量名=value

②变量名=value;export
变量名

③ declare -x
变量名=value

实例:

1.当前生效

exportOLDBOY="oldboy"

echo $OLDBOY

2.对当前用户有效

vi .bash_profile

3.对所有用户都生效

vi /etc/profile

source /etc/profile
或 . ./etc/profile

显示与取消环境变量

通过echo
命令打印环境变量

$HOME用户登陆时进入的目录

$UID 当前用户的UID(用户标识)

$PWD 当前工作目录的绝对路径名

$SHELL 当前SHELL

$USER当前用户

[[email protected] ~]$ echo $HOME

/home/oldboy

[[email protected] ~]$ echo $UID

501

[[email protected] ~]$ echo $PWD

/home/oldboy

[[email protected] ~]$ echo$SHELL

/bin/bash

[[email protected] ~]$ echo $USER

oldboy

用env{printenv}或set显示默认的环境变量

[[email protected] ~]$

[[email protected] ~]$ env

HOSTNAME=mode

SHELL=/bin/bash

TERM=vt100

OLD=old

HISTSIZE=1000

LC_ALL=C

USER=oldboy

LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=

01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*

.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.l

zh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31

:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35

:*.png=01;35:*.tif=01;35:

MAIL=/var/spool/mail/oldboy

PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sersync/bin:/usr/local

/mysql/bin:/usr/local/mysql/scripts:/usr/local/mysql:/home/oldboy/bin:/home/oldboy/bi

n

INPUTRC=/etc/inputrc

PWD=/home/oldboy

LANG=en_US.UTF-8

OLDBOY=oldboy

SHLVL=1

HOME=/home/oldboy

LOGNAME=oldboy

CVS_RSH=ssh

LESSOPEN=|/usr/bin/lesspipe.sh%s

G_BROKEN_FILENAMES=1

_=/bin/env

或则set -a

[[email protected] ~]$ id -u

501

[[email protected] ~]$ echo $UID

501

用unset消除本地变量和环境变量

echo $USER

unset USER

局部变量

定义本地变量

普通字符串变量定义

变量名=value

变量名=‘value‘

变量名=“value”

输出 echo
“a=$a”

或者 echo
“a=${a}”

有关单引号.双引号与不加引号的简要说明如下:

单引号:

        可以说是所见即所得:即将单引号的内容原样输出,或者描述为单引号里面看到底的

是什么,就输出什么

双引号:

把双引号内的内容输出出来;如果内容中有命令,变量等,会先把变量,命令解析出结果,然后

在输出最终内容来

无引号:

    把内容输出出来,会将含有空格的字符串视为一个整体输出,如果内容中有命令。变量

等,会先把变量,命令解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符

,则不能完整的输出,需要改加双引号,一般连续的字符串,数据,路径等可以用,不过最好用

双引号替代之

范例1:经过反引号的‘date’命令测试

[[email protected] ~]# echo‘`date`‘

`date`

[[email protected] ~]# echo"`date`"

Sat Feb 14 19:25:29 CST2015

[[email protected] ~]# echo `date`

Sat Feb 14 19:25:37 CST2015

对于变量的引用,一个 一个是$,另一个是``

范例2:awk
调用s[[email protected] ~]# ETT=123

[[email protected] ~]# awk ‘BEGIN{print "$ETT"}‘

$ETT

[[email protected] ~]# awk ‘BEGIN{print ‘$ETT‘}‘

123

自定义变量的建议

(1).
纯数字(不带空格),定义方式可以不加引号(单或双),例如

a.oldboyage=33

b.NETWORKING=yes

2.没有特殊情况,字符串一般用双引号()定义,特别是多个字符创空间有空格时

a.NFSD_NODULE="no load"

b.MyName="Oldboy is handsome boy."

3.变量内容需要原样输出时,要用单引号(‘‘)

a.OLDBOY_NAME=‘OLDBOY‘

变量的命名规范

1)变量命名要统一,使用全部大写字母,多个单词连接使用“_”,引用时,最好以${APACHE}

_ERR_NUM}加大括号或“${APACHE_ERR_NUM}”外面加双引号方式引用变量:

2)避免无含义字符或数字:例如下面的COUNT,并不知道其确切含义

3)全局变量定义,如OLDBOY_HOME或OLDBOYHOME,在变量使用时,使用{}将变括起来

或“${OLDBOY_HOME}”

脚本中局部变量定义:存在于脚本函数(function)中的变量称为局部变量,要以local方式进行

声明,使之之在本函数作用域内有效,防止变量在函数中的命名与变量外部程序中变量重名造成

程序异常,

function TestFunc()

{

local i

for((i=0;i<n;i++))

do

echo ‘do something‘;

done

}

变量合并:当某些变量或配置项要组合起来才有意义时,如文件的路径,和文件名称,建议将要

组合的变量合并到一起赋值给一个新的变量,这样既方便之后的调用,也为以后进行修改提供方

便;

例如:VERSION=‘2.2.22‘

SOFTWARE_NAME="httpd"

SOFTWARE_FULLNAME="${SOFTWARE_NAME}-${VERSION}.tar.gz"

把一个命令作为变量

CMD= `ls`wd/

echo $CMD

[[email protected] ~]# ls

anaconda-ks.cfg  index.html   install.log         oldboy

grep.log         index.html.1  install.log.syslog

[[email protected] ~]# CMD=`ls`

[[email protected] ~]# echo $CMD

anaconda-ks.cfg grep.logindex.html index.html.1 install.log install.log.syslog

oldboy

在变量名前面加$,可以取得此变量的值,使用echo
命令 可以显示变量的值,$A和${A}的写法不

同,但是功能一样,

3${WEEK}day
若变量和其他字符组成新的变量就必须加上大括号{}

4养成将所有字符创变量用双引号括起来的使用的习惯,将会减少很多编程是遇到的奇怪的错误

生产环境常见应用:

1.对站点按天打包生成不同的文件名。

CMD=$(date +%F)

echo $CMD

echo $(date +%F).tar.gz

echo `date +%F`.tar.gz

tar zcvf etc_$(date +%F).tar.gz/etc

时间: 2024-11-05 17:24:25

shell脚本编程讲解2的相关文章

Linux中的shell脚本编程——函数

概述: 本章节将总结while,for循环语句的特殊用法,在不同的场景当中,更能发挥其功能和价值.除此之外,还会介绍一种特殊的循环语句select语句,实现菜单的作用.最重要的是讲解shell脚本编程中函数的用法.这些内容都要熟练掌握. 一.循环语句的特殊用法: 1.while循环的特殊用法(遍历文件的每一行): □语法:while read line; do 循环体 done < /PATH/FROM/SOMEFILE □意义:依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将

BeagleBone Black板第五课:Shell脚本编程实验

BBB板第五课:Shell脚本编程实验 在一上课我们通过简单的echo命令测试并控制GPIO端口的高低电平输出,实现对一个LED指示灯的点亮和关闭控制,本节将通过Shell脚本编程,来完成两个LED指示灯的交替闪亮的实验. 实验器材:准备两个二极管指示灯,面包板等 使用GPIO端口P8.12和P8.11两个引脚 我们暂时不借助其他工具软件,直接远程登陆到BBB板的图形桌面,使用内置的Ledfpad编辑器来完成Shell脚本的编程. 远程登陆BBB板图形桌面还记得吧,不记得话参考前面的课程,这里就

shell脚本编程之选择控制结构

程序开发语言,分为两种,一种是解释型语言,一种是编译型语言.解释型语言是解释语句,并且能根据流程控制机制让语句按需执行,解释一条语句就返回语句的结果,这种语言需要一个解释器,而linux中的bash就是这样的一个解释器,常见的解释型语言有perl,python,ruby,bash.编译型语言,首先需要编译源程序,并且能够将源程序转换为二进制格式,而后让其执行,这种语言需要一个编辑器,如linux下的gcc就是一个编辑器,编译型语言有C,C++,C#等.无论是解释型语言还是编译型语言,都有语言控制

shell脚本编程之循环控制结

shell脚本编程之循环控制结构 循环控制之for循环 语法结构1 for  Variable  in List do commands done 语法结构2 for  Variable  in List:do commands done 这个List可以为列表.变量.命令 等等 for循环    事先提供一个元素列表,而后,使用变量去遍历此元素列表,每访问一个元素,就执行一次循环体,直到元素访问完毕 1.for循环中的List为列表 eg1:   显示/etc/inittab, /etc/rc

python编写shell脚本详细讲解

今天需要编写一个shell脚本实现App自动生成的功能,需要处理HTTP REST请求,解析JSON,处理文件,执行命令等,本来想用shell搞定,但感觉比较麻烦,还是用python吧,虽然以前用Python都是在树莓派上玩的,多尝试一种方法总是好的. 虽然我受linux的影响甚深,但是对于*nix 里随处可见的sh脚本却是讨厌之极.为什么讨厌呢?首先是因为sh脚本那莫名其妙的语法,感觉就像随写随扔的程序,完全没有任何美感可言.其次是sh脚本的处理能力还是比较弱的,在文本处理.XML处理还有网络

shell脚本编程之正则表达式(二)(扩展正则表达式、sed)

shell脚本编程之正则表达式(二) 一.前言 ? 本文主要是对扩展正则表达式的介绍,同时,继续按照上篇文章的风格介绍sed文本处理工具,sed作为shell编程中"三剑客"之一,在对文本处理上有巨大作用.关于正则概念以及grep命令结合正则使用的案例请参照:https://blog.51cto.com/14557673/2455588 二.扩展正则表达式 ? 扩展正则表达式主要是为了简化指令而产出的.例如,使用基础正则表达式查询文件中空白行与行首为#号之外的行(一般用于查看生效的配置

shell脚本编程学习笔记(1)

在linux上编程,离不开shell,计划好好看看shell编程,并在这里做些笔记以供有相同兴趣的人分享,主要参考<shell脚本学习指南>. 学习shell脚本编程之前,需要了解脚本编程语言和编译型语言的概念. 一般很多中型.大型的程序是用编译型语言写成的,比如C.C++.Java等.这类程序从源代码编译成目标代码,直接通过计算机执行.编译型语言执行效率比较高,大多运作于底层,处理的是字节.整数.浮点数等机器层级的对象,因此实现一个具体的功能,比如"将一个目录里的所有文件复制到另外

Shell脚本编程知识点总结及范例

 一:关于语言 1)编译性语言 编译型语言多半运作于底层,所处理的是字节.整数.浮点数或其它及其机器层经的对象.处理过程为:源程序--预处理--编译--汇编--链接,编译性语言为静态语言. 2)解释性语言 解释性语言读入程序代码并将其转化为内部的形式加以执行.处理过程:解释性(文本文件)-解释器去读取并执行.解释性语言为动态语言. 二:基础 变量类型 linux脚本中的变量不需要事先声明,而是直接定义使用(这点不同于其他高级编程语言中变量的使用)bash变量类型分为本地变量和环境变量. 本地变量

shell脚本编程——流程控制

shell脚本编程--流程控制 目   录 一. if 二. case 三. for 四. while 五. until 六. 综合应用 一.if 1.语法 (1)单分支 if  判断条件:then fi (2)双分支 if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi (3)多分支 if 判断条件1; then 条件为真的分支代码 elif 判断条件2; then 条件为真的分支代码 elif 判断条件3; then 条件为真的分支代码 else 以上条件都为假