设为首页 收藏本站
查看: 868|回复: 0

shell环境和变量

[复制链接]

尚未签到

发表于 2018-8-24 12:44:12 | 显示全部楼层 |阅读模式
  本地变量
  本地变量在用户现在的shell生命期的脚本中使用。例如,本地变量file-name取值为loop,doc,这个值只在用户当前shell生命期有意义。如果在shell中启动另一个进程或退出,此值将无效。这个方法的优点就是用户不能对其他的shell或进程设置此变量有效。
  使用变量时,如果用花括号将之括起来,可以防止shell误解变量值,尽管不必一定要这样做,但这确实可用。
  要设置一本地变量,格式为:
  $ variable-name=value 或${variable-name=value}
  变量设置时的不同模式
  variable-name=value设置实际值到variable-name
  variable-name+value如果设置了variable-name,则重设其值
  variable-name:?value如果未设置variable-name,显示未定义用户错误信息
  variable-name?value如果未设置variable-name,显示系统错误信息
  variable-name:=value如果未设置variable-name,设置其值
  variable-name:-value同上,但是取值并不设置到variable-name,可以被替换
  显示变量
  myname="alca.lai"
  echo "$myname"
  可以结合使用变量,下面将错误信息和环境变量logname设置到变量error_msg。ERROR_MSG="sorry this file does not exist user $LOGNAME"
  echo $ERROR_MSG
  shell首先显示文本,然后查找变量$logname,最后扩展变量以显示整个变量值。
  清除变量
  unset  valuename
  显示所有本地shell变量
  set
  结合变量值
  将变量并排可以使变量结合在一起
  firstname="lai"
  secondname="alca"
  echo "your fullname is ${secondname}.${firstname} "
  测试变量是否已经设置
  有时要测试是否已设置或初始化变量。如果未设置或初始化,就可以使用另一值。此命
  令格式为: variable:-value
  意即如果设置了变量值,则使用它,如果未设置,则取新值
  #color="blue"
  #echo "the sky is ${color:-grey} today"
  color="blue"
  unset color
  echo "the sky is ${color:-grey} today"
  上面的例子并没有将实际值传给变量,需使用下述命令完成此功能:
  ${variable:=value}
  敲回车键表明用户并没有设置两个变量值,将使用缺省值(3:00和weekly)
  echo "what time do you wish to start the payroll [3:00];"
  read TIME
  echo "process to start at ${TIME:=3:00} OK"
  echo "Is it a monthly or weekly run [weekly];"
  read RUN_TYPE
  echo "Run type is ${RUN_TYPE:=weekly}"
  at -f $RUN_TYPE $TIME
  variable:?value  编写脚本测试变量是否取值,然后返回带有系统错误信息的结果
  echo "The file is ${files:? "sorry this files is not locate the variable "}"
  variable=""设置空值变量
  使用变量来保存系统命令参数
  #sources="/etc/passwd"
  #dest="/tmp/passwd.bak"
  #cp ${sources} ${dest}
  设置只读变量
  myname="alca.lai"
  echo $myname
  readonly myname
  myname="alca"
  执行脚本显示只读变量./variable-name
  alca.lai
  ./variable-name: line 35: myname: readonly variable
  环境变量
  环境变量
  环境变量用于所有用户进程(经常称为子进程)。登录进程称为父进程。shell中执行的用户进程均称为子进程。不像本地变量(只用于现在的shell)环境变量可用于所有子进程,这包括编辑器、脚本和应用。
  环境变量可以在命令行中设置,但用户注销时这些值将丢失,因此最好在.profile文件中定义。系统管理员可能在/etc/profile文件中已经设置了一些环境变量。将之放入profile文件意味着每次登录时这些值都将被初始化。
  传统上,所有环境变量均为大写。环境变量应用于用户进程前,必须用export命令导出。
  环境变量与本地变量设置方式相同。
  设置环境变量
  variable-name=value;export variable  或者分开写
  显示环境变量
  和本地变量一样
  console=tty1;export console
  echo $console
  使用env命令可以查看所有的环境变量。
  清除环境变量
  使用unset命令清除环境变量
  嵌入shell变量
  shell 有一些预留的环境变量名,这些变量名不能用作其他用途。通常在/etc/profile中建立这些嵌入的环境变量,但也不完全是,这取决于用户自己。以下是嵌入shell变量列表。
  1:CDPATH
  2:EXINIT
  3:HOME
  4:IFS
  5:LOGNAME
  6:MAIL
  7:MAILCHECK
  8:MAILPATH
  9:PATH
  10:PS1
  11:PS2
  12:SHELL
  13:TERMINFO
  14:TERM
  15:TZ
  其他环境变量
  1.EDITOR
  设置编辑器,最常用。
  $ EDITOR=vi ;export EDITOR
  2. PWD
  当前目录路径名,用cd命令设置此选项。
  3. PAGER
  保存屏幕翻页命令,如pg、more,在查看man文本时用到此功能。
  $ PAGER='pg -f -p%;d'export PAGER
  4.MANPATH
  保存系统上man文本的目录。目录间用冒号分隔。
  $ MANPATH=/usr/apps/man:/usr/local;/emxapnort MANPATH
  5. LPDEST或P R I N T E R
  保存缺省打印机名,用于打印作业时指定打印机名。
  $ LPDEST=hp3si-systems
  set命令
  在$home.profile文件中设置环境变量时,还有另一种方法导出这些变量。使用set命令-a选项,即set -a指明所有变量直接被导出。不要在/etc/profile中使用这种方法,最好只在自的$home.profile文件中使用。
  将变量导出到子进程
  两个脚本列表father和child。
  father脚本设置变量film,取值为A new day has come,并将变量信息返回屏幕,然后调用脚
  本child,这段脚本显示第一个脚本里的变量film,然后改变其值为Daddy i am coming,再将其显示在屏幕上,最后控制返回father脚本,再次显示这个变量。
  father
  #!/bin/bash
  #father script
  echo "this is father"
  film="A new day has come"
  echo "I like the film: ${film}"
  #call the child script
  export film   #环境变量
  ./child
  echo "back to father"
  echo "and the film is: ${film}"
  child
  #!/bin/bash
  #child
  echo "called from father..i am the child"
  echo "film name is : ${film}"  #继承father的值
  film="Daddy i am coming"
  echo "changing film to : ${film}"
  输出结果:
  this is father
  I like the film: A new day has come
  called from father..i am the child
  film name is : A new day has come
  changing film to : Daddy i am coming
  back to father
  and the film is: A new day has come
  位置变量参数
  位置变量和特定变量参数
  如果要向一个shell脚本传递信息,可以使用位置参数完成此功能。参数相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问,使用shift命令可以改变这个限制。参数从第一个开始,在第9个结束;每个访问参数前要加$符号。第一个参数为0,表示预留保存实际脚本名字。无论脚本是否有参数,此值均可用。
  如果向脚本传送Did You See The Full Moon信息.
  #位置变量参数
  #echo "this is script name           :$0"
  #echo "this is first parameter       :$1"
  #echo "this is second parameter      :$2"
  #echo "this is third parameter       :$3"
  #echo "this is fourth parameter      :$4"
  #echo "this is fifth parameter       :$5"
  #echo "this is sixth parameter       :$6"
  #echo "this is seventh parameter     :$7"
  #echo "this is eighth parameter      :$8"
  #echo "this is ninth parameter       :$9"
  echo "hello this is $0 calling"
  echo "hello this is `basename $0` calling"
  向系统命令传递参数


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-555983-1-1.html 上篇帖子: shell--eval 下篇帖子: shell中$(( )) 与 $( ) 还有${ }的区别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表