变量(1)

2013年3月18日 星期一 晴



变量



一、编辑创建用户脚本



1、筛选用户是否已经建立



[root@desktop7 ~]# grep jerry /etc/passwd



2、创建用户



[root@desktop7 ~]#vim createuser.sh(/bin/bash)(可登录系统)



#!/bin/bash


#create user


#pate:cre


#auther:fengzhao001


#Version:



NAME=marry


U_ID=550


G_ID=550



echo "$NAME:x:$U_ID:$G_ID::/home/$NAME:/bin/bash">>/etc/passwd


echo "$NAME:!!:15781(2013-03-18):0:99999:7:::">>/etc/shadow


echo "$NAME:x:$G_ID:">>/etc/group


echo "$NAME:!::">>/etc/gshadow


cp /etc/skel/{.bash_logout,.bash_profile,.bashrc,.emacs} /home/$NAME



保存退出



3、为该文件赋予执行权限



[root@desktop7 ~]# chmod a+x createuser.sh



4、创建该用户目录



[root@desktop7 ~]# mkdir /home/marry



5、执行脚本文件



[root@desktop7 ~]# ./createuser.sh



6、验证



[root@desktop7 ~]# tail -3 /etc/passwd


gdm:x:42:42::/var/gdm:/sbin/nologin


chenglong:x:500:501::/home/chenglong:/bin/bash


marry:x:550:550::/home/:/bin/bash


[root@desktop7 ~]#



创建用户成功



二、设定变量



1、正确脚本文件



(1)、编辑脚本文件



[root@desktop7 ~]# vim mustpreset.sh


  1 #!/bin/bash


  2


  3 shopt -s -o nounset


  4


  5 declare Infomix=50


  6


  7 echo $Infomix



保存退出                



(2)、赋予权限



[root@desktop7 ~]# chmod a+x mustpreset.sh



(3)、执行脚本


 


[root@desktop7 ~]# ./mustpreset.sh


50



2、不产生报错信息的设置



(1)编辑脚本文件(去掉原第三行信息:shopt -s -o nounset)



[root@desktop7 ~]# vim mustpreset.sh


  1 #!/bin/bash


  2


  3 declare Infomix=50


  4


  5 echo $Informix                           #加上字母r


 


(2)执行脚本文件



[root@desktop7 ~]# ./mustpreset.sh



[root@desktop7 ~]#



3、产生报错信息的设置



(1)、编辑脚本文件



[root@desktop7 ~]# vim mustpreset.sh


  1 #!/bin/bash


  2


  3 shopt -s -o nounset


  4


  5 declare Infomix=50


  6


  7 echo $Informix                            #加上字母r



保存退出



(2)执行脚本文件



[root@desktop7 ~]# ./mustpreset.sh


./mustpreset.sh: line 7: Informix: unbound variable



原第三行信息:shopt -s -o nounset



-s 打开选项:-o指可用set -o 设定的选项;后nounset指变量一定要先设定过,才能使用



set -o 可对系统进行操作



[root@desktop7 ~]# set -o


allexport       off


braceexpand     on


emacs           on


errexit         off


errtrace        off


functrace       off


hashall         on


histexpand      on


history         on


ignoreeof       off


interactive-comments    on


keyword         off


monitor         on


noclobber       off


noexec          off


noglob          off


nolog           off


notify          off


nounset         off


onecmd          off


physical        off


pipefail        off


posix           off


privileged      off


verbose         off


vi              off


xtrace          off


[root@desktop7 ~]#



nounset的用法,可避免手误,意即产生报错信息



当然,declare声明变量Infomix,可以省略



三、取得变量值



1、方法一:



[root@desktop7 ~]# I=8


[root@desktop7 ~]# J=$I


[root@desktop7 ~]# echo $J


8


[root@desktop7 ~]#



2、方法二:



[root@desktop7 ~]# echo ${J}


8


[root@desktop7 ~]#



3、转义$,作为正常符号使用



[root@desktop7 ~]# echo \$J


$J


[root@desktop7 ~]#



4、printf+”格式字符串“



[root@desktop7 ~]# HI="Hello,the World"


[root@desktop7 ~]# printf "%s""$HI"


Hello,the World[root@desktop7 ~]#


[root@desktop7 ~]#



5、以字符串的方式(%s之意),显示HI变量值的内容,但不换行



printf 本身不会自动换行,需加\n换行



[root@desktop7 ~]# printf "%s\n""$HI"



Hello,the World[root@desktop7 ~]#


[root@desktop7 ~]#



[root@desktop7 ~]# printf "%s" "abc\n"


abc\n[root@desktop7 ~]# printf "%s\n" "abc"


abc


[root@desktop7 ~]#


[root@desktop7 ~]#


[root@desktop7 ~]# printf "%s\n" "abc"


abc


[root@desktop7 ~]#


[root@desktop7 ~]# printf "%s\n" "abc"


abc


[root@desktop7 ~]# printf "%s" "abc"


abc[root@desktop7 ~]# printf "%s" "abc"


abc[root@desktop7 ~]# printf "%s\n" "abc"


abc


[root@desktop7 ~]# printf "%s\n\n" "abc"


abc



[root@desktop7 ~]# printf "\n%s\n\n" "abc"



abc



[root@desktop7 ~]#



6、转义特殊字符



[root@desktop7 ~]# SP="ABC 123 XYZ"


[root@desktop7 ~]# printf "%q\n" "$SP"


ABC\ 123\ XYZ



四、取消与清空变量



1、取消变量



unset [-v] 变量名称


 


[root@desktop7 ~]# unset SP


[root@desktop7 ~]# echo $SP



[root@desktop7 ~]#



unset [-f] 函数名称



2、清空变量



[root@desktop7 ~]# myname=fengzhao001


[root@desktop7 ~]# echo $myname


fengzhao001



[root@desktop7 ~]# myname=


[root@desktop7 ~]# echo $myname



[root@desktop7 ~]#


(占用资源,不建议使用)



五、变量和引号



1、双引号作用


(1)替换变量


(2)替换命令执行结果(稍后章节介绍)


(3)替换算术运算结果(稍后章节介绍)



2、双引号执行效果



[root@desktop7 ~]# vim shuangyinhao.sh


  1  #!/bin/bash


  2


  3 myname="fengzhao001"


  4


  5 HelloWorld="Hi,你好,我是$myname"


  6


  7 echo $HelloWorld



[root@desktop7 ~]# chmod a+x shuangyinhao.sh


[root@desktop7 ~]# ./shuangyinhao.sh


Hi,你好,我是fengzhao001


[root@desktop7 ~]#



3、单引号执行效果



[root@desktop7 ~]# vim danyinhao.sh


  1 #!/bin/bash


  2


  3 myname="fengzhao001"


  4


  5 HelloWorld='Hi,你好,我是$myname'


  6


  7 echo $HelloWorld



[root@desktop7 ~]# chmod a+x danyinhao.sh


[root@desktop7 ~]# ./danyinhao.sh


Hi,你好,我是$myname


[root@desktop7 ~]#



单引号的作用是形成一个所见即所得的字符串(写什么,显示什么),不会进行任何替换变量的操作。



4、抑制双引号中的替换变量


使用\转义$,取得变量值的作用



[root@desktop7 ~]# vim shuangyinhao.sh


  1 #!/bin/bash


  2


  3 myname="fengzhao001"


  4


  5 HelloWorld="Hi,你好,我是\$myname"           #在$前加转义字符\


  6


  7 echo $HelloWorld


~                     


[root@desktop7 ~]# ./shuangyinhao.sh


Hi,你好,我是$myname


[root@desktop7 ~]#



六、环境变量



1、环境变量



[root@desktop7 ~]# export


declare -x COLORTERM="gnome-terminal"


declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-9cStT7oYSC,guid=7c44be2c45db6de83ac8de005145beb8"


declare -x DESKTOP_SESSION="default"


declare -x DESKTOP_STARTUP_ID=""


declare -x DISPLAY=":0.0"


declare -x GDMSESSION="default"


declare -x GDM_XSERVER_LOCATION="local"


declare -x GNOME_DESKTOP_SESSION_ID="Default"


declare -x GNOME_KEYRING_SOCKET="/tmp/keyring-iDV5yC/socket"


declare -x GTK_IM_MODULE="scim-bridge"


declare -x GTK_RC_FILES="/etc/gtk/gtkrc:/root/.gtkrc-1.2-gnome2"


declare -x G_BROKEN_FILENAMES="1"


declare -x HISTSIZE="1000"


declare -x HOME="/root"


declare -x HOSTNAME="desktop7.example.com"


declare -x INPUTRC="/etc/inputrc"


declare -x LANG="en_US.UTF-8"


declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"


declare -x LOGNAME="root"


declare -x LS_COLORS="no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:"


declare -x MAIL="/var/spool/mail/root"


declare -x OLDPWD


declare -x PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin"


declare -x PWD="/root"


declare -x QT_IM_MODULE="scim"


declare -x SESSION_MANAGER="local/desktop7.example.com:/tmp/.ICE-unix/3995"


declare -x SHELL="/bin/bash"


declare -x SHLVL="2"


declare -x SSH_AGENT_PID="4030"


declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"


declare -x SSH_AUTH_SOCK="/tmp/ssh-WhZWQB3995/agent.3995"


declare -x TERM="xterm"


declare -x USER="root"


declare -x WINDOWID="25165906"


declare -x XAUTHORITY="/tmp/.gdmTJHVTW"


declare -x XMODIFIERS="@im=SCIM"


[root@desktop7 ~]#



2、将变量输出变成环境变量



方法一:



[root@desktop7 ~]# myname=fengzhao001


[root@desktop7 ~]# export myname


[root@desktop7 ~]# bash


[root@desktop7 ~]# echo $myname


fengzhao001


[root@desktop7 ~]#



方法二:



[root@desktop7 ~]# declare -x myname=fengzhao001


[root@desktop7 ~]# echo $myname


fengzhao001


[root@desktop7 ~]#



3、取消环境变量



[root@desktop7 ~]# unset myname


[root@desktop7 ~]# echo $myname



[root@desktop7 ~]#



4、清空环境变量



[root@desktop7 ~]# myname=


[root@desktop7 ~]# echo $myname



[root@desktop7 ~]#



七、常用环境变量



[root@desktop7 ~]# cd $HOME


[root@desktop7 ~]# ls


anaconda-ks.cfg  Desktop             install-vserver  o


createuser.sh    install.log         mbox             shuangyinhao.sh


danyinhao.sh     install.log.syslog  mustpreset.sh


[root@desktop7 ~]#



[root@desktop7 ~]# echo $HOSTTYPE                  #主机类型


x86_64



[root@desktop7 ~]# echo $HOSTNAME                  #主机名


desktop7.example.com



[root@desktop7 ~]# echo $MACHTYPE                  #描述主机形态的GNU格式:CPU-公司-系统


x86_64-redhat-linux-gnu



[root@desktop7 ~]# echo $MAIL                      #邮件文件名


/var/spool/mail/root



[root@desktop7 ~]# echo $MAILCHECK                 #每隔多久检查一次邮件


60



[root@desktop7 ~]# echo $OSTYPE                    #执行bash的操作系统种类


linux-gnu



[root@desktop7 ~]# echo $LINENOB                   #script已执行到的行数


25



[root@desktop7 ~]# echo $PS1                       #PS1主提示符,默认如下,可修改


[\u@\h \W]\$



[root@desktop7 ~]# PS1=[root@fengzhao001~]#


[root@fengzhao001~]#pwd


/root


[root@fengzhao001~]#ls


anaconda-ks.cfg  Desktop             install-vserver  o


createuser.sh    install.log         mbox             shuangyinhao.sh


danyinhao.sh     install.log.syslog  mustpreset.sh


[root@fengzhao001~]#PS1=fengzhao001#


fengzhao001#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


fengzhao001#



[root@desktop7 ~]# echo $PS2                       #PS2次提示符,默认为>


>




初始bash配置文件(学完shell即可自己完成一下编辑)


[root@desktop7 ~]# vim /etc/bashrc


  1 # /etc/bashrc


  2


  3 # System wide functions and aliases


  4 # Environment stuff goes in /etc/profile


  5


  6 # are we an interactive shell?


  7 if [ "$PS1" ]; then


  8   if [ -z "$PROMPT_COMMAND" ]; then


  9     case $TERM in


 10         xterm*)


 11                 if [ -e /etc/sysconfig/bash-prompt-xterm ]; then


 12                         PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm


 13                 else


 14             PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'


 15                 fi


 16                 ;;


 17         screen)


 18                 if [ -e /etc/sysconfig/bash-prompt-screen ]; then


 19                         PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen


 20                 else


 21             PROMPT_COMMAND='printf "\033]0;%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'


 22                 fi


 23                 ;;


 24         *)


 25                 [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default


 26             ;;


 27     esac


 28   fi


 29   # Turn on checkwinsize


 30   shopt -s checkwinsize


 31   [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "


 32 fi


 33


 34 if ! shopt -q login_shell ; then # We're not a login shell


 35         # Need to redefine pathmunge, it get's undefined at the end of /etc/profile


 36     pathmunge () {


 37                 if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then


 38                         if [ "$2" = "after" ] ; then


 39                                 PATH=$PATH:$1


 40                         else


 41                                 PATH=$1:$PATH


 42                         fi


 43                 fi


 44         }


 45


 46     # By default, we want umask to get set. This sets it for non-login shell.


 47     # You could check uidgid reservation validity in


 48     # /usr/share/doc/setup-*/uidgid file


 49     if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then


 50        umask 002


 51     else


 52        umask 022


 53     fi


 54


 55         # Only display echos from profile.d scripts if we are no login shell


 56     # and interactive - otherwise just process them to set envvars


 57     for i in /etc/profile.d/*.sh; do


 58         if [ -r "$i" ]; then


 59             if [ "$PS1" ]; then


 60                 . $i


 61             else


 62                 . $i >/dev/null 2>&1


 63             fi


 64         fi


 65     done


 66


 67         unset i


 68         unset pathmunge


 69 fi


 70 # vim:ts=4:sw=4


                            


你可能感兴趣的:(变量)