当前位置:  操作系统/服务器>linux

Shell编程之Shell变量学习总结

    来源: 互联网  发布时间:2014-10-15

    本文导语:  一、变量操作 A.变量显示、打印语法:echo $varB.变量设置语法:var=value 变量的设置规则:1.变量两端不能直接接空格符2.变量名称只能是因为字母与数字,但开头不能使数字3.双引号内的特殊字符如$等,保持原本特性 代码...

一、变量操作

A.变量显示、打印
语法:echo $var
B.变量设置
语法:var=value

变量的设置规则:
1.变量两端不能直接接空格符
2.变量名称只能是因为字母与数字,但开头不能使数字
3.双引号内的特殊字符如$等,保持原本特性

代码如下:
[root@bogon ~]# var="lang is $LANG"
[root@bogon ~]# echo %var
root@bogon ~]# echo $var
lang is zh_CN.UTF-8

1. 单引号内的特殊字符则仅为一般字符
代码如下:
[root@bogon ~]#
[root@bogon ~]# var='lang is $LANG';echo $var
lang is $LANG

2. 在一串命令中,还需要通过其他命令提供的信息,可用单引号‘命令'或&(命令),举例:指令1在执行的过程中需要先知道指令2的的值,但是指令1,2在一串指令中
代码如下:
[root@bogon ~]# uname -r
2.6.18-371.el5
[root@bogon ~]# cd /lib/modules/$(uname -r)/kernel
[root@bogon kernel]#

3. 变量的累加
代码如下:
[root@bogon kernel]# var=${var}yes
[root@bogon kernel]# echo $var
lang is $LANGyes

4. 数组变量设置与读取
代码如下:
[root@bogon ~]# array[1]=a
[root@bogon ~]# array[2]=b
[root@bogon ~]# array[3]=c
[root@bogon ~]# echo ${array[1]}
a
[root@bogon ~]# echo ${array[2]}

[root@bogon ~]# echo ${array[3]}
c

C.取消变量(unset)
语法: unset var

D.变量查看(set)
语法:set

比较重要的几个自定义变量
HISTFILE:历史记录存储位置
MAILCHECK:多少秒扫描次邮箱,查看是否有新邮件
PS1:提示符设置
$:目前这个shell的PID
?:刚才执行完命令的回传码。0为正确,非0为错误

举例:

代码如下:

比较重要的几个自定义变量
HISTFILE:历史记录存储位置
MAILCHECK:多少秒扫描次邮箱,查看是否有新邮件
PS1:提示符设置
$:目前这个shell的PID
?:刚才执行完命令的回传码。0为正确,非0为错误

E.变量键盘读取(read)
语法:read [-pt] var
选项与参数:
-p:后可跟提示信息
-t:后跟等待输入的描述

举例:

代码如下:

[plain] view plaincopyprint?
[root@bogon ~]# read atest 
this is a test 
[root@bogon ~]# echo $atest 
this is a test 
[root@bogon ~]# read -p "please input.. " attest   
please input.. hello world      =>提示信息 
[root@bogon ~]# echo $atest 
hello world 
[root@bogon ~]# read -p "please input.. " -t 5  atest 
please input..  =>5秒未输入回到命令行模式 
[root@bogon ~]#  
[root@bogon ~]# echo $atest 
hello world

F.变量声明(declare)
语法:declare [-aixr] var
选项与参数
declare后不接任何内容,代表查询所有变量,作用和set一致
-a  :将后面名为 variable的变量定义成为数组 (array)类型
-i  :将后面名为 variable的变量定义成为整数数字 (integer)类型
-x  :用法与 export一样,就是将后面的 variable变成环境变量;
+x :将环境变量变为自定义变量
-r  :将变量配置成为 readonly类型,该变量不可被更改内容,也不能 unset(需要注销后再登陆才能变回)

举例:

代码如下:
[plain] view plaincopyprint?
[root@bogon ~]# echo $sum 
100+50+10 =>默认当做字符串处理 
[root@bogon ~]# declare -i sum=100+50+10  
[root@bogon ~]# echo $sum 
160 =>声明为int 因此可以做加法 
[root@bogon ~]# declare -x sum 
[root@bogon ~]# export | grep sum 
declare -ix sum="160" =>查询到是环境变量 
[root@bogon ~]# declare +x sum 
[root@bogon ~]# export | grep sum= >查询不到是环境变量 
[root@bogon ~]# declare -r sum;sum=test 
bash: sum: readonly variable =>只读允许修改 

G.变量内容删除
语法
${var#/key}:从前往后删除符合key最短的那一个
${var##/key}:从前往后删除符合key最长的那一个
${var%/key}:从后往前删除符合key最短的那一个
${var%%/key}:从后往前删除符合key最短的那一个

举例:${var#/key}

代码如下:
[plain] view plaincopyprint?
[root@bogon ~]# path=${PATH};echo $path 
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 
[root@bogon ~]# echo ${path#/*:}        =>key为*.(*为通配符) 
/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 


举例:${var##/key}
代码如下:
[plain] view plaincopyprint?
[root@bogon ~]# path=${PATH};echo $path 
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 
[root@bogon ~]# echo ${path##/*:} 
/root/bin 

H.变量内容替换
语法:
${var/旧字符串/新字符串}:替换第一个满足条件的字符串
${var//旧字符串/新字符串}:替换所有满足条件的字符串
举例:${var/旧字符串/新字符串}

代码如下:
[plain] view plaincopyprint?
root@bogon ~]# path=${PATH};echo $path 
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 
[root@bogon ~]# echo ${path/sbin/SBIN} 
/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 


举例:${var//旧字符串/新字符串}
代码如下:
[plain] view plaincopyprint?
[root@bogon ~]# path=${PATH};echo $path 
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 
[root@bogon ~]# echo ${path//sbin/SBIN} 
/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/SBIN:/usr/local/bin:/SBIN:/bin:/usr/SBIN:/usr/bin:/usr/X11R6/bin:/root/bin 

二、环境变量
普通变量可以理解为局部变量,环境变量可以理解为全局变量,登陆成功获得的bash shell就是一个进程,在此情况下再去打开一个新SHELL就是他的子进程,子进程是无法获取父进程的自定义变量,但是可以获取父进程的环境变量

A.环境变量导出(export )
语法:export  var

B.环境变量查看(env )

语法:env

比较重要的几个环境变量
HOME:代表用户的主文件夹
SHELL:代表目前使用的shell是哪个程序,我现在使用的是/bin/bash
HISTSIZE:历史记录最大存储条数
MAIL:mail命令系统收信时,系统会读取的信箱文件
PATH:执行文件查找路径
LANG:语系信息
RANDOM:随机数变量(0~32767)

三、提示符的设置(PS1)
变量PS1='[u@h W]$ '记录了命令提示符的显示格式 [root@bogon ~]#

符号意义
d :可显示出[星期月日]的日期格式,如:"Mon Feb 2"
H :完整的主机名。
h :仅取主机名在第一个小数点之前的名字
t :显示时间,为 24小时格式的[HH:MM:SS]
T :显示时间,为 12小时格式的[HH:MM:SS]
A :显示时间,为 24小时格式的[HH:MM]
@ :显示时间,为 12小时格式的[am/pm]样式
u :目前使用者的账号名称,如[root];
v :BASH的版本信息,如鸟哥的测试主板本为 3.2.25(1),仅取[3.2]显示
w :完整的工作目录名称,由根目录写起的目录名称。但家目录会以 ~取代;
W :利用 basename函数取得工作目录名称,所以仅会列出最后一个目录名。
# :下达的第几个命令。
$ :提示字符,如果是 root时,提示字符为 #,否则就是 $

举例:

代码如下:
[root@bogon ~]# PS1='[u@hA W #]$ '
[root@bogon23:45 ~ 82]#


    
 
 

您可能感兴趣的文章:

  • shell变量和子shell的问题请教
  • shell编程,如何将变量中的环境变量转换为绝对值
  • 怎么查看自己的shell的环境变量,和root的环境变量,solaris系统
  • 子shell改变父shell定义变量的值
  • gdb下用shell写环境变量的问题
  • 关于shell变量传递问题?
  • 如何查看当前shell的所有环境变量?
  • 请问如何在C语言中获得shell 变量
  • 请教个shell环境变量的问题
  • Shell编程中如何获取环境变量中设置的路径
  • C语言调用shell脚本后,通过何种方法能获取脚本中变量的值
  • [linux shell] 如何获得以一个变量的值为名的变量的值
  • 请问一个关于shell变量的简单问题
  • 急急急!!!!!!用B shell如何实现截取变量的子串?
  • unix shell中能否将后台运行程序的输出保存到变量中?
  • 程序中如何使用setenv或者export配置环境变量在当前shell生效
  • 为什么我的系统看不到shell,home变量?
  • 怎样用shell读取properties里面某个键对应的值,再赋值给shell中的变量
  • redhat7.2下怎么在shell文件中以变动日期做为变量?急!!
  • shell脚本的变量问题
  • 傻瓜问题,请问shell编程和shell脚本编程的关系
  • 请问什么是shell编程?一般都用shell编程实现什么?
  • 请教一个shell编程的问题,就是如何在shell编程中读一个文件的内容?谢谢啦!
  • Linux下的编程指的就是Shell编程吗?
  • 那里有《shell编程》和关于curses编程的教程可以下载,请帮忙?
  • C编程与shell编程有什么区别,两者有没有从属关系?
  • Linux C编程一站式学习,高级shell Bash脚本编程指南,
  • shell 编程 执行shell新建多个终端 并执行程序
  • Linux命令、编辑器与Shell编程 和 UNIX SHELL范例精解(第4版) 区别大么?
  • Shell编程的,可以在shell中访问多行的属性吗?如:
  • 刚学Shell编程,问个关于Shell中if语句的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 不同类型的shell*(K SHELL , C SHELL) 用命令怎么切换?
  • linux bash shell命令:grep文本搜索工具简介
  • 我在执行shell时,想在shell里直接向mysql数据库插入数据,我该如何写shell。
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 菜鸟问问题:shell是什么呢?普通的ls、cp、pwd这些命令算不算shell呢?如何把自己写的文件变成shell呢?
  • linux bash shell命令:文本搜索工具grep中用于egrep和 grep -E的元字符扩展集
  • 请问“当前shell”和“子shell”的区别?
  • linux bash shell命令:文本搜索工具Grep命令选项及实例
  • 怎么知道当前是B_SHELL 还是C_SHELL
  • linux bash shell命令:文本搜索工具grep正则表达式元字符集(基本集)
  • 用户登陆后运行某SHELL退出SHELL就回到LOGIN是怎么作到的?
  • 怎么写shell代码 写好shell怎么运行?
  • 请问一个shell中如何获取这个shell自身抛出的错误?
  • 非登录shell是什么 意思,和登录shell有什么区别啊
  • Solaris 8中修改root的shell为一个非法的Shell后怎么办?
  • 各位Shell高人,如何取得Shell的第10个入口参数?$10不行啊,急!
  • 如何在一台机器上的shell中执行另外一台机器上的shell
  • 在shell中的交互问题,现在需要在shell结束时按某键或任意键
  • 请教 一个shell问题 如何通过shell获得一个日志文件中的增量部分
  • 小弟没写过shell,求解 linux shell 命令


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3