shell及脚本1——变量

  一.shell 

  shell是操作系统与用户之间的沟通的渠道,可以接收并执行用户的命令,有很多shell程序,目前linux默认使用bash shell程序。

  bash shell有很多实用功能,例如:

  • 命令记忆
  • 命令补全

    [TAB][TAB]:列出所有命令

  *[TAB][TAB]:列出所有以字符*开头的命令

  *[TAB]:列出当前目录以字符*开头的命令

  • 后台运行,&,可以不受CTRL+C影响,且单一登录环境中达到多任务目的
  • 程序脚本,功能强大

  二.变量

  跟C语言里的变量意义差不多。

  三.变量的显示与设置echo,=,unset

  1. 显示变量: echo  $变量

[email protected]:/etc$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/work/setup/lin/bin:/work/setup/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_linux/bin
[email protected]:/etc$ echo ${PATH}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/work/setup/lin/bin:/work/setup/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_linux/bin

  2. 设置变量, =, 定义与赋值合一了

[email protected]:~$ myvar=test_variable
[email protected]:~$ echo $myvar
test_variable
[email protected]:~$ myvar="test_variable"
[email protected]:~$ echo $myvar
test_variable

(1). 空格,两边不能直接接空格符,右侧需要用双引号或者单引号扩起来
[email protected]:~$ myvar=test variable  // 错误,不能有空格,bash会认为空格后面的variable是个命令
variable: command not found
[email protected]:~$ myvar="test variable"
[email protected]:~$ echo $myvar
test variable[email protected]:~$ var ="lang is $LANG"  // 等号左边也不能有空格No command ‘var‘ found, but there are 22 similar onesvar: command not found

(2) 单引号和双引号[email protected]:~$ var="lang is $LANG"  // 双引号内的特殊字符,如$还其特殊字符的作用[email protected]:~$ echo $varlang is en_US.UTF-8[email protected]:~$ var=‘lang is $LANG‘    // 单引号内的特殊字符变为普通字符,没有特殊作用了[email protected]:~$ echo $varlang is $LANG

(3) 转意字符可把特殊字符变为普通字符[email protected]:~$ var="lang is \$LANG"[email protected]:~$ echo $varlang is $LANG

(4) 获取其他命令提供的信息,  $(命令) 或 `命令`,注意是反引号,数字键1旁边的那个[email protected]:~$ var=$(uname -r)[email protected]:~$ echo $var4.2.0-27-generic[email protected]:~$ var=`uname -r`[email protected]:~$ echo $var4.2.0-27-generic

(5) 变量的累加 [email protected]:~$ echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/work/setup/lin/bin:/work/setup/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_linux/bin[email protected]:~$ PATH="$PATH":/home[email protected]:~$ echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/work/setup/lin/bin:/work/setup/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_linux/bin:/home

  注意:

变量名只能是英文+数字,且只能英文开头;

    若变量需要在其他子进程使用,需要使用export使其具有环境变量的作用。

通常大写字符是系统默认变量,小写字符是用户自定义变量

  3. 撤销变量unset

[email protected]:~$ echo $var
4.2.0-27-generic
[email protected]:~$ unset var
[email protected]:~$ echo $var

 

 四.环境变量

env:查看环境变量

set:查看所有变量(环境变量+用户变量)

[email protected]:~$ env
XDG_VTNR=7
XDG_SESSION_ID=c2
CLUTTER_IM_MODULE=xim
SELINUX_INIT=YES
XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/liuwanpeng
SESSION=ubuntu
GPG_AGENT_INFO=/run/user/1000/keyring-UUS4MO/gpg:0:1
TERM=xterm
SHELL=/bin/bash
XDG_MENU_PREFIX=gnome-
VTE_VERSION=3409
WINDOWID=60817419
OLDPWD=/home/liuwanpeng
UPSTART_SESSION=unix:abstract=/com/ubuntu/upstart-session/1000/1897
GNOME_KEYRING_CONTROL=/run/user/1000/keyring-UUS4MO
GTK_MODULES=overlay-scrollbar:unity-gtk-module
USER=liuwanpeng
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
SSH_AUTH_SOCK=/run/user/1000/keyring-UUS4MO/ssh
SESSION_MANAGER=local/ubuntu:@/tmp/.ICE-unix/2047,unix/ubuntu:/tmp/.ICE-unix/2047
DEFAULTS_PATH=/usr/share/gconf/ubuntu.default.path
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/work/setup/lin/bin:/work/setup/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_linux/bin:/home
DESKTOP_SESSION=ubuntu
QT_IM_MODULE=ibus
QT_QPA_PLATFORMTHEME=appmenu-qt5
JOB=dbus
PWD=/home/liuwanpeng
XMODIFIERS[email protected]=ibus
GNOME_KEYRING_PID=1895=en_US.UTF-8
GDM_LANG=en_US
MANDATORY_PATH=/usr/share/gconf/ubuntu.mandatory.path
IM_CONFIG_PHASE=1
COMPIZ_CONFIG_PROFILE=ubuntu
GDMSESSION=ubuntu
SESSIONTYPE=gnome-session
XDG_SEAT=seat0
HOME=/home/liuwanpeng
SHLVL=1
LANGUAGE=en_US
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
LOGNAME=liuwanpeng
COMPIZ_BIN_PATH=/usr/bin/
XDG_DATA_DIRS=/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/
QT4_IM_MODULE=xim
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-mtBR2W2AvW
LESSOPEN=| /usr/bin/lesspipe %s
INSTANCE=
TEXTDOMAIN=im-config
XDG_RUNTIME_DIR=/run/user/1000
DISPLAY=:0
XDG_CURRENT_DESKTOP=Unity
GTK_IM_MODULE=ibus
LESSCLOSE=/usr/bin/lesspipe %s %s
TEXTDOMAINDIR=/usr/share/locale/
COLORTERM=gnome-terminal
XAUTHORITY=/home/liuwanpeng/.Xauthority
_=/usr/bin/env

  1.重要的变量

(1). PS1设置命令提示符的格式

PS1=‘\[\e]0;\[email protected]\h: \w\a\]${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ ‘

可以修改 /etc/profile,改变PS1的默认值

(2). 本shell的PID:$

[email protected]:~$ echo $$
2583

(3).上一个执行命令的回传码?,即执行结果,一般0是正确,其他至是错误

[email protected]:~$ ls /no_dir
ls: cannot access /no_dir: No such file or directory
[email protected]:~$ echo $?
2
[email protected]:~$ ls
[email protected]:~$ echo $?
0

2.环境变量与自定义变量/变量的有效范围

(1).子进程只继承父进程的环境变量,不能继承自定义变量,如果想让父进程的自定义变量可以在子进程里使用,需要用export导出该变量

(2).环境变量~全局变量;自定义变量~局部变量

五. 变量键盘输入 read

-p:后接提示信息

-t: 超时时间

[email protected]:~$ read var
input val from keyboard
[email protected]:~$ echo $var
input val from keyboard

[email protected]:~$ read -p "input value:" -t 30 var
input value:my input
[email protected]:~$ echo $var
my input

六. 声明变量的类型 declare/typedset

如果不带参数,会显示所有命令,跟set差不多。

declare [-aixr]  variable参数:-a:将variable的变量定义为数组,array-i:整型-x:与export一样-r:readonly,只读

1. -i,shell默认是字符串,1+2+3不是6,而是字符串“1+2+3”[email protected]:~$ sum=1+2+3[email protected]:~$ echo $sum1+2+3[email protected]:~$ declare -i sum=1+2+3[email protected]:~$ echo $sum6

2. -x和-r[email protected]:~$ declare -x sum    // export[email protected]:~$ export | grep sum  // export命令列出所有带-x的变量,sum带有x属性declare -ix sum="6"             [email protected]:~$ declare +x sum    // +号的意思是“取消”[email protected]:~$ export | grep sum  // 没有了[email protected]:~$ declare -p sum      // -p单独列出变脸的类型declare -i sum="6"[email protected]:~$ declare -r sum[email protected]:~$ sum=10bash: sum: readonly variable

七. 数组类型array,shell支持一维数组

[email protected]:~$ array[1]=1
[email protected]:~$ array[2]=2
[email protected]:~$ echo ${array[2]}    // 只有此种形式显示才正常!!!   ${}

八.变量内容的删除,替代和替换

1. 删除部分字符

${变量#关键字} 从左往右,按符合关键字的最短字符处理
${变量##关键字} 从左往右,按符合关键字的最长字符处理
${变量%关键字} 从右往左,按符合关键字的最短字符处理
${变量%%关键字} 从右往左,按符合关键字的最长字符处理
[email protected]:~$ echo ${PATH}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
[email protected]:~$ echo ${PATH#/*sbin:}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

[email protected]:~$ echo ${PATH##/*sbin:}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/game

[email protected]:~$ echo ${PATH%sbin}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

[email protected]:~$ echo ${PATH%%sbin}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

2. 替代部分字符

${变量/旧字符/新字符} 第一个被替换
${变量//旧字符/新字符} 所有都被替换
[email protected]:~$ echo ${PATH/sbin/SBIN}
/usr/local/SBIN:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/work/setup/lin/bin
[email protected]:~$ echo ${PATH//sbin/SBIN}
/usr/local/SBIN:/usr/local/bin:/usr/SBIN:/usr/bin:/SBIN:/bin:/usr/games:/usr/local/games:/work/setup/lin/bin

2. 整体替换: new_var=${old_var-content},new_var=${old_var:-content}

[email protected]:~$ var_old=old
[email protected]:~$ var_new=${var_old-new}  // var_old已经设置,后面的new没有赋上,被赋值为var_old
[email protected]:~$ echo $var_new
old
[email protected]:~$ unset var_old
[email protected]:~$ var_new=${var_old-new}  // var_old没有设置,var_new被赋值new
[email protected]:~$ echo $var_new
new

[email protected]:~$ var_old=""         // 虽为空字符,但是已设置[email protected]:~$ var_new=${var_old-new}   // var_old已设置,var_new=$var_old=空字符[email protected]:~$ echo $var_new 

[email protected]:~$ var_new=${var_old:-new}  // 冒号把“空字符“视为“未设置“bash: ${var_old:-new}: bad substitution[email protected]:~$ var_new=${var_old:-new}[email protected]:~$ echo $var_new new
时间: 2024-07-28 12:27:00

shell及脚本1——变量的相关文章

Linux Shell 01 脚本与变量

一 脚本的创建和执行 1. 创建文件*.sh,文件后缀为sh 2. 编辑脚本 首行必须为:#!/bin/bash   #指定解释脚本的shell 3. 赋权 chmod u+x a.sh 4. 执行 ./a.sh 二 shell脚本中的变量 1.变量的定义与删除 name="hello" #定义变量=前后不能有空格 unset name #删除变量 a. 当前shell中定义的变量只在当前shell有效 b. 不论是普通变量还是环境变量,归根结底都是变量,都遵循变量的基本操作 2.环境

shell脚本之变量与状态码

目录: 前言 如何创建一个脚本 脚本调试 变量相关 变量的命令规则 bash中变量的种类 本地变量 环境变量 只读和位置变量 位置变量 查询变量 进程的退出状态与状态码 前言 在linux管理中,shell脚本很是重要,它可以帮助我们完成很多繁琐的工作,专注于更重要的事情上来,脚本的学习也是我们学习linux中所要遇到的比较困难的部分,因为它需要对vim,正则,逻辑,程序化语言有一定的熟悉,shell编程是过程式,解释执行的.它包括各种系统指令的组合,数据存储(变量,数组).表达式.语句. 在s

shell脚本之变量替换

代码如下 #!/bin/bash a=123 let "a += 1" echo a=$a echo b=${a/12/BB} echo "b=$b" 执行结果为 a=124 b=BB4 b=${a/12/BB} 变量a中的值12被替换为BB,所以$b=BB4 shell脚本之变量替换,布布扣,bubuko.com

Bash Shell脚本编程-变量知识

Shell:GUI  CLI 提供交互式接口:提高效率 命令行展开:~ ,{} 命令别名:alias 命令历史:history Globbing:*,?,[],[^] 命令补全:$PATH指定的目录下 路径补全:TAB键 管道:| 输入输出重定向:>    >> 提供编程环境: bash自动运行脚本机制 面向过程(以指令为中心组织数据)的编程模型 脚本编程 输入指令解决问题 程序是语句和表达式组成的 运行时根据一定流程来执行: 顺序执行 选择执行 循环执行 程序是指令+数据的 面向对象(

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句 一:实验环境 1):虚拟机 2):linux系统 二:实验目标 1): shell 基本语法 2):变量 3):表达式 4):判断语句 5): if表达式 三:实验脚本 第一块 一个简单的shell脚本程序 [[email protected] ~]# mkdir test [[email protected] test]# vim example1.sh #!/bin/bash #This is to show wha

shell脚本基础----变量

1.1shell的定义 1.命令的堆积 2.特定的语法与特定的命令组成的文件 执行脚本命令 bash test.sh 不需要添加执行权限,使用解释器直接解释 sh tesh.sh ./tesh.sh 相对路径,需要添加执行权限 1.2shell脚本基础---变量 变量:用一个固定的字符串表示不固定的内容变量名称注意事项 1.不能以数字开头(包含字母.数字.下划线) 2.不能使用程序中的保留字(例如:if for) 3.不能跟系统中已有的环境变量重名(尽量不要全部使用大写,尽量不要用'_'下划线开

Linux/Unix shell sql 之间传递变量

灵活结合Linux/Unix Shell 与SQL 之间的变量传输,极大程度的提高了DBA的工作效率,本文针对Linux/Unix shell sql 之间传递变量给出几个简单的示例以供参考. Linux/Unix 下调用SQL,RAMN 请参考:Linux/Unix shell 脚本中调用SQL,RMAN脚本 一.示例 [python] view plain copy print? 1.shell变量接受sql返回值之方式一 [email protected]:~> more ./retval

shell编程概述以及变量

动态语言:解释型语言,是一种弱类型的语言,特性:边解释边执行.例如:PHP.SHELL.python.perl 弱:变量用时声明,甚至不区分类型. 强:变量在使用前,必须事先声明,甚至还需要初始化 bash:本身就是一个软件,脚本解释器. shell脚本是面向过程的. bash变量类型: 环境变量 本地变量(局部变量) 位置变量 特殊变量 本地变量: VARNAME=VALUE;作用域:整个bash进程 局部变量 local VARNAME=VALUE:作用域:为当前代码段 环境变量:作用域为当

shell编程 Shell script 的默认变量($0, $1...)

Shell script 的默认变量($0, $1...) 我们知道指令可以带有选项与参数,例如 ls -la 可以察看包含隐藏文件的所有属性与权限.那么 shell script 能不能在脚本文件名后面带有参数呢?很有趣喔!举例来说,如果你想要重新启动系统登录文件的功能,可以这样做: [[email protected] ~]# file /etc/init.d/syslog /etc/init.d/syslog: Bourne-Again shell script text executab