Shell编程之Shell变量学习总结

一、变量操作

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@\h\A \W \#]\$ '
[root@bogon23:45 ~ 82]#

(0)

相关推荐

  • 利用shell编程实现DOS风格的Linux命令行

    如果你是习惯于Windows命令提示符的IT人,当你第一次使用Linux命令行时,一定会感到无所适从.你所熟悉的DOS命令再Linux中基本不存在.摆在你面前的是一大堆要记背的命令. 一种替代方案是利用强大的Linux外壳命令编写shell脚本,让你在Linux下也能用DOS命令.下面告诉你怎么做. shell脚本编写基础    从定时备份到执行简单命令,Linux的shell脚本可以执行各种功能.几乎所有的程序都可以用shell脚本来运行.在脚本中甚至可以包含一些简单的条件选择.shell脚本

  • shift妙用之解决shell编程中的入参问题

    我说过了,shell是我的常规武器,目前虽然还不纯熟,但是我爱shell这门语言,在Linux下面混,总要写脚本.程序员是有基因,对编程语言是有偏好的,你让我写C代码,我会觉得很爽,会有困难,会有痛苦的摸索和学习,但是,我愿意:学习shell/python,我也很乐意,甚至Lisp这种冷门的语言我也充满了好奇,虽然现在Go和Erlang我一点也不懂,但是我按耐不住对这两种语言的兴趣,只要我抽出手来,一定会和他们缠绵一番.有爱就会有恨,我痛苦地意识到到自己是个很情绪化的程序员,哪怕我一遍遍地骂自己

  • shell编程基础 单引号和双引号的区别

    下面用一个简单的shell程序要说明一下. debian:~/learn/shell# cat phonebook Alice Chebba 973-555-2015 Barbara Swingle 201-555-9257 Liz Stachiw 212-555-2298 Susan Goldberg 201-555-7776 Susan Topple 212-555-4932 Tony Iannino 973-555-1295 Stromboli Pizza 973-555-9478 deb

  • shell编程基础知识小结

    1.文件类型介绍linux系统中主要包括以下七种文件类型: d 目录 - 普通文件 l 符号链接 s 套接字文件 b 块设备文件 c 字符设备文件 p 命名管道文件 2.正则表达式正则表达式在shell编程中非常重要. 从一个文件或命令输出中抽取或过滤文本时.可使用正则表达式(RE),正则表达式是一些特殊或不很特殊的字符串模式的集合. 基本的元字符集:^ 只匹配行首.$ 只匹配行尾.* 一个单字符后紧跟*,匹配0个或多个此单字符.[] 匹配[]内字符,可以是一个单字符,也可以是字符序列.可以使用

  • 让代码整洁、过程清晰的BASH Shell编程技巧

    这是我写BASH程序的招式.这里本没有什么新的内容,但是从我的经验来看,人们爱滥用BASH.他们忽略了计算机科学,而从他们的程序中创造的是"大泥球"(译注:指架构不清晰的软件系统). 在此我告诉你方法,以保护你的程序免于障碍,并保持代码的整洁. 一.不可改变的全局变量 1.尽量少用全局变量 2.以大写命名 3.只读声明 4.用全局变量来代替隐晦的$0,$1等 在我的程序中常使用的全局变量: 复制代码 代码如下: readonly PROGNAME=$(basename $0) read

  • shell编程之实现windows回收站功能分享

    一. 功能简介1. 将删除的文件放在回收站中2. 恢复删除的文件3. 实现linux rm命令的功能, 使用起来几乎和linux 系统自带的rm ,命令完全一样4. 新增功能: rm -l, rm -e, rm -c5. 该脚本每次在运行时候会检查$HOME/.trash 目录下文件大小之和, 若 超过最大容量, 脚本会自动将日志文件中所记录文件中的前一半文件从回 收站中清除,所以建议删除大文件(相对于回收站最大容量而言)直接用 命令/bin/rm 而不要用 rm. 二. 使用方法:1. 将tr

  • 深入浅出Shell编程 Shell变量介绍

    •深入浅出Shell编程: Shell 变量 ◦1 系统变量 ◦2 Shell用户变量 ■2.1 基础 ■2.2 使用技巧 ■2.3 shell 中的数组 ◦3 shell 环境变量 先不要管Shell的版本,来看看Shell 变量,在Shell中有三种变量:系统变量,环境变量,用户变量.其中用户变量在编程过程中使用最多,系统变量在对参数判断和命令返回值判断会使用,环境变量主要是在程序运行的时候需要设置. 1 系统变量 Shell常用的系统变量并不多,但却十分有用,特别是在做一些参数检测的时候.

  • shell编程基础之认识与学习BASH

    1.认识Bash 通过Shell将输入的指令与Kernel沟通,让Kernel控制硬件工作查看Shell:cat /etc/shell登录后预设的shell类型记录在/etc/passwd中,与账户相关命令别名:alias lm='ls -al' #注意有无空格帮助:man bash命令类型:type 复制代码 代码如下: type ls # ls is aliased to `ls –color=auto'type cat # cat is hashed (/bin/cat)type cd #

  • PowerShell编程中的一些命名规则参考

    本文介绍PowerShell自定义函数在使用时的最佳实践(Best Practices).包括函数名的命名.可选参数.必选参数等. PowerShell中的函数定义可以很简单的使用一个"function <函数名>{函数体}"的形式去定义.但微软推荐创建函数时遵循以下实践规则. 1.函数名. 使用cmdlet的统一命令规则,即"动词-名词"的形式.如Write-Host,表示输出到主机.如果是获取一个列表,不要使用List作为动词,建议使用Get,如Ge

  • 分享shell编程中的几个小技巧

    1.打印一些头信息command  <<  dilimiter----dilimiter 以分界符号dilimiter中的内容作为命令的标准输入常用在echo命令中,这样就避免了没输出一行就要使用一个echo命令,同时,输出格式的调整也相应变得简单了.例如:  echo << something_message**********************hello, welcome to use my shell script **********************somet

  • Shell编程指南

    基础知识 shell执行方式   sh xx.sh (文件须有r权限)  ||  ./xx.sh (文件须有x权限) 注:sh xx.sh方式比较安全 文件名后缀 .sh shell内容开头 #!/bin/bash || #!/bin/sh || #!/bin/csh || #!/bin/ksh 注:#!/bin/bash 使用比较多 退出  exit 0 变量赋值与使用 不需要定义即可直接使用  注:变量赋值时=号两端不能有空格 以$变量名或${变量名}访问变量内容 流程控制 判断  注:确保

  • Shell编程的一些知识集合

    下午在写程序的时候需要将shell命令返回的数值赋予给某变量,使用了a=$()的方法 soft=$(grep -i "\(Software \)Token/Passcode/." 123.txt |wc -l) echo "[+] 软卡总数:" $soft ...... #!shell下的运算 over=$((var-use)) echo "[+] 剩余硬卡:" $over Shell的嵌入命令 : 空,永远返回为true . 从当前shell中

随机推荐