认识bash这个shell
硬件、内核和shell
用户操作计算机流程如下:
用户——>用户界面(shell,KDE,application)——>核心(kernel)——>硬件(hardware)
应用程序处于最外层,因此称为shell,shell的功能是提供用户操作系统的一个接口。狭义的shell指的是命令行软件(包括bash),广义的shell包括图形界面软件
系统的合法shell和/etc/shells功能
系统合法的shell都写入到/etc/shells这个软件,查看该文件如下:
[[email protected] wuchao_test]# cat /etc/shells /bin/sh (已经被/bin/bash所替代) /bin/bash (Linux默认的shell) /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin /bin/tcsh /bin/csh [[email protected] wuchao_test]#
用户登陆后可以取得的默认shell都会记录在/etc/passwd文件内:
[[email protected] wuchao_test]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:997:995:User for polkitd:/:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin unbound:x:996:993:Unbound DNS resolver:/etc/unbound:/sbin/nologin usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin colord:x:995:992:User for colord:/var/lib/colord:/sbin/nologin amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin libstoragemgmt:x:993:990:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin geoclue:x:992:989:User for geoclue:/var/lib/geoclue:/sbin/nologin rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin setroubleshoot:x:991:988::/var/lib/setroubleshoot:/sbin/nologin rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin qemu:x:107:107:qemu user:/:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin radvd:x:75:75:radvd user:/:/sbin/nologin chrony:x:990:987::/var/lib/chrony:/sbin/nologin sssd:x:989:986:User for sssd:/:/sbin/nologin pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin gdm:x:42:42::/var/lib/gdm:/sbin/nologin gnome-initial-setup:x:988:983::/run/gnome-initial-setup/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin wuchao:x:1000:1000:rootUser(wuchao):/home/wuchao:/bin/bash
bash shell的功能
既然/bin/bash是Linux默认的shell,接下来了解下这个shell。
bash有以下优点:
命令记忆功能
可以记下使用过的命令,只要在命令行按上下关键就可以找到前/后输入过的命令。这些命令记录在~/.bash_history,注意的是该文件只记录上次之前的命令,本次的所有命令暂存在内存里
命令补全功能
tab键接在一串命令的第一个字后面,则为命令补全,tab键接在一串命令的第二个字以后,则为文件补全
命令别名设置
当我们想列出所有文件时,需要输入ls -al命令,更快捷的方式是使用别名代替这个命令,设置别名:alias lm=‘ls -al’
//设置别名 [[email protected] wuchao_test]# alias lm=‘ls -al‘ [[email protected] wuchao_test]# lm . total 188 drwxr-xr-x. 2 root root 84 6月 30 20:57 . drwxrwxrwt. 47 root root 4096 7月 1 08:14 .. -rw-r--r--. 1 root root 2370 6月 30 20:52 hosts -rw-r--r--. 1 root root 511 4月 1 01:39 inittab -rw-------. 1 root root 151271 6月 27 13:25 test2.txt -rw-------. 1 root root 20480 6月 30 20:00 .test2.txt.swo -rw-r--r--. 1 root root 44 6月 30 19:19 test.txt //取消别名 [[email protected] wuchao_test]# unalias lm [[email protected] wuchao_test]# lm . bash: lm: command not found... [[email protected] wuchao_test]#
作业控制、前台、后台控制
第17章Linux过程控制部分再讲
程序脚本(shell script)
可以将平时管理系统需要执行的连续命令写成一个文件
通配符
比如查询/usr/bin下有多少以X开头的文件,输入:ls -l /usr/bin/X*
bash shell的内置命令:type
使用type可以查看命令是bash内置的,还是来源于其他
[[email protected] ~]# type ls ls is aliased to `ls --color=auto‘ [[email protected] ~]# type cd cd is a shell builtin [[email protected] ~]# type which which is aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘
shell的变量功能
变量的显示与设置:echo,unset
变量的显示:echo $变量名或echo ${变量名}
[email protected]:~# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/java/jdk1.8.0_77/bin:/usr/local/java/jdk1.8.0_77/bin [email protected]:~#
变量的设置规则:
1.变量与变量内容用“=”号连接
2.单引号内的字符仅为一般字符,双引号内的特殊字符可保持原有特性
[email protected]:~# name1=‘$PATH‘ [email protected]:~# name2="$PATH" [email protected]:~# echo $name1 $PATH [email protected]:~# echo $name2 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/java/jdk1.8.0_77/bin:/usr/local/java/jdk1.8.0_77/bin [email protected]:~#
3.可用转义字符“\”将特殊字符变为一般字符
4.在一串命令中,如果还需要其他命令提供信息,使用反单引号`命令`或$(命令)
[email protected]:~# version=$(uname -r) [email protected]:~# echo $version 3.13.0-32-generic [email protected]:~#
5.在变量后追加变量内容,可用“$变量名称”或${变量名称}累加内容
[email protected]:~# name1=hello [email protected]:~# name2=${name1}wuchao [email protected]:~# echo $name2 hellowuchao [email protected]:~#
6.若该变量需要在其他子进程使用,需要export来使变量称为环境变量
环境变量的功能
用env查看环境变量
[[email protected] 桌面]# env XDG_VTNR=1 XDG_SESSION_ID=1 SSH_AGENT_PID=3304 HOSTNAME=localhost.localdomain IMSETTINGS_INTEGRATE_DESKTOP=yes GPG_AGENT_INFO=/run/user/0/keyring/gpg:0:1 VTE_VERSION=3803 XDG_MENU_PREFIX=gnome- SHELL=/bin/bash TERM=xterm-256color HISTSIZE=1000 WINDOWID=35651591 IMSETTINGS_MODULE=IBus USER=root LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45: SSH_AUTH_SOCK=/run/user/0/keyring/ssh SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/3141,unix/unix:/tmp/.ICE-unix/3141 USERNAME=root GNOME_SHELL_SESSION_MODE=classic DESKTOP_SESSION=gnome-classic MAIL=/var/spool/mail/root PATH=/usr/local/java/jdk1.8.0_91/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin QT_IM_MODULE=ibus PWD=/root/桌面 JAVA_HOME=/usr/local/java/jdk1.8.0_91 XMODIFIERS[email protected]=ibus LANG=zh_CN.UTF-8 GDM_LANG=zh_CN.UTF-8 GDMSESSION=gnome-classic HISTCONTROL=ignoredups SHLVL=2 HOME=/root XDG_SEAT=seat0 GNOME_DESKTOP_SESSION_ID=this-is-deprecated LOGNAME=root XDG_SESSION_DESKTOP=gnome-classic CLASSPATH=/usr/local/java/jdk1.8.0_91/jre/lib/ext:/usr/local/java/jdk1.8.0_91/lib/tools.jar DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-XFSA7YGZp6,guid=46b270284336ec9172459a4e5777171e LESSOPEN=||/usr/bin/lesspipe.sh %s WINDOWPATH=1 DISPLAY=:0 XDG_RUNTIME_DIR=/run/user/0 XDG_CURRENT_DESKTOP=GNOME-Classic:GNOME XAUTHORITY=/run/gdm/auth-for-root-Qkf798/database _=/usr/bin/env [[email protected] 桌面]#
以下对几个常见的环境变量简单的介绍下:
HOME:代表用户的主文件夹
SHELL:告知目前环境使用的shell是哪个程序
HISTSIZE:历史命令的记录数
MAIL:当我们使用mail命令时,系统读取的邮件信箱文件
LANG:语系数据,英文通常为en_US.UTF-8,中文通常是zh_CN.gb2312和zh_CN.UTF-8
RANDOM:随机数的变量,可以通过$RANDOM获取,范围为0~32767
set查看所有变量(环境变量和自定义变量)
[[email protected] 桌面]# set ABRT_DEBUG_LOG=/dev/null BASH=/bin/bash BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d BASH_LINENO=() BASH_SOURCE=() BASH_VERSINFO=([0]="4" [1]="2" [2]="46" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu") BASH_VERSION=‘4.2.46(1)-release‘ CLASSPATH=/usr/local/java/jdk1.8.0_91/jre/lib/ext:/usr/local/java/jdk1.8.0_91/lib/tools.jar COLUMNS=80 COMP_WORDBREAKS=$‘ \t\n"\‘><=;|&(:‘ DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-XFSA7YGZp6,guid=46b270284336ec9172459a4e5777171e DESKTOP_SESSION=gnome-classic DIRSTACK=() DISPLAY=:0 EUID=0 GDMSESSION=gnome-classic GDM_LANG=zh_CN.UTF-8 GNOME_DESKTOP_SESSION_ID=this-is-deprecated GNOME_SHELL_SESSION_MODE=classic GPG_AGENT_INFO=/run/user/0/keyring/gpg:0:1 GROUPS=() HISTCONTROL=ignoredups HISTFILE=/root/.bash_history HISTFILESIZE=1000 HISTSIZE=1000 HOME=/root HOSTNAME=localhost.localdomain HOSTTYPE=x86_64 ID=0 IFS=$‘ \t\n‘ IMSETTINGS_INTEGRATE_DESKTOP=yes IMSETTINGS_MODULE=IBus JAVA_HOME=/usr/local/java/jdk1.8.0_91 LANG=zh_CN.UTF-8 LESSOPEN=‘||/usr/bin/lesspipe.sh %s‘ LINES=24 LOGNAME=root LPATHDIR=/root/.cache/abrt LS_COLORS=‘rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:‘ MACHTYPE=x86_64-redhat-linux-gnu MAIL=/var/spool/mail/root MAILCHECK=60 OPTERR=1 OPTIND=1 OSTYPE=linux-gnu PATH=/usr/local/java/jdk1.8.0_91/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin PIPESTATUS=([0]="0") PPID=3879 PROMPT_COMMAND=__vte_prompt_command PS1=‘[\[email protected]\h \W]\$ ‘ PS2=‘> ‘ PS4=‘+ ‘ PWD=$‘/root/\346\241\214\351\235\242‘ QT_IM_MODULE=ibus SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/3141,unix/unix:/tmp/.ICE-unix/3141 SHELL=/bin/bash SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor SHLVL=2 SINCE=1467076530 SINCEFILE=/root/.cache/abrt/lastnotification SSH_AGENT_PID=3304 SSH_AUTH_SOCK=/run/user/0/keyring/ssh TERM=xterm-256color TMPPATH=/root/.cache/abrt/lastnotification.w46b8i8T UID=0 USER=root USERNAME=root VTE_VERSION=3803 WINDOWID=35651591 WINDOWPATH=1 XAUTHORITY=/run/gdm/auth-for-root-Qkf798/database XDG_CURRENT_DESKTOP=GNOME-Classic:GNOME XDG_MENU_PREFIX=gnome- XDG_RUNTIME_DIR=/run/user/0 XDG_SEAT=seat0 XDG_SESSION_DESKTOP=gnome-classic XDG_SESSION_ID=1 XDG_VTNR=1 XMODIFIERS[email protected]=ibus //后面省略
上面会列出很多变量,记住几个比较重要的变量:
PS1:提示符设置
\d:显示星期月日的日期格式
\H:完整的主机名
\h:主机名第一个小数点前面的部分
\t:显示时间,24小时格式,HH:MM:SS
\T:显示时间,12小时格式,HH:MM:SS
\A:显示时间,24小时格式,HH:MM
\@:显示时间,12小时,am/pm样式
\u:目前用户的账号名称
\v:BASH的版本
\w:完整的工作目录名称
\W:利用basename取得的工作目录名称,所有仅会列出最后一个目录名
\#:执行的第几个命令
\$:提示符,如果是root时显示#
查看上面内容可知PS1=‘[\[email protected]\h \W]\$ ‘,故命令行显示[[email protected] ~]#
OSTYPE,HOSTYPE,MACHTYPE
主机硬件与内核等级
export:自定义变量转成环境变量
当我们登陆Linux时便取得一个bash,这个bash就是一个独立的进程,在这个bash执行的命令都是由这个bash衍生出来的,因此被执行的命令称为子进程,子进程仅会继承父进程的环境变量,不会继承自定义变量。
使用“export 变量名”将自定义变量设为环境变量,使用“export”可以查看所有的环境变量。
影响显示结果的语系变量(local)
使用locale -a查看所有支持的语系
[[email protected] ~]# locale -a en_AG en_AG.utf8 en_AU en_AU.iso88591 en_AU.utf8 en_BW en_BW.iso88591 en_BW.utf8 en_CA en_CA.iso88591 en_CA.utf8 en_DK en_DK.iso88591 en_DK.utf8 en_GB en_GB.iso88591 en_GB.iso885915 en_GB.utf8 en_HK en_HK.iso88591 en_HK.utf8 en_IE [email protected] en_IE.iso88591 [email protected] en_IE.utf8 en_IN en_IN.utf8 en_NG en_NG.utf8 en_NZ en_NZ.iso88591 en_NZ.utf8 en_PH en_PH.iso88591 en_PH.utf8 en_SG en_SG.iso88591 en_SG.utf8 en_US en_US.iso88591 en_US.iso885915 en_US.utf8 en_ZA en_ZA.iso88591 en_ZA.utf8 en_ZM en_ZM.utf8 en_ZW en_ZW.iso88591 en_ZW.utf8 //省略 zh_CN zh_CN.gb18030 zh_CN.gb2312 zh_CN.gbk zh_CN.utf8 zh_HK zh_HK.big5hkscs zh_HK.utf8 zh_SG zh_SG.gb2312 zh_SG.gbk zh_SG.utf8 zh_TW zh_TW.big5 zh_TW.euctw zh_TW.utf8 zu_ZA zu_ZA.iso88591 zu_ZA.utf8 [[email protected] ~]#
查看需要设置的语系变量
直接输入locale
[[email protected] ~]# locale LANG=zh_CN.UTF-8 LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_COLLATE="zh_CN.UTF-8" LC_MONETARY="zh_CN.UTF-8" LC_MESSAGES="zh_CN.UTF-8" LC_PAPER="zh_CN.UTF-8" LC_NAME="zh_CN.UTF-8" LC_ADDRESS="zh_CN.UTF-8" LC_TELEPHONE="zh_CN.UTF-8" LC_MEASUREMENT="zh_CN.UTF-8" LC_IDENTIFICATION="zh_CN.UTF-8" LC_ALL= [[email protected] ~]#
当设置了LANG或者LC_ALL时,其他的语系变量都会被这两个变量替换,所以我们通常只设置LANG变量即可。centos7以前在/etc/sysconfig/i18n设置,centos7在/etc/loacle.conf文件设置LANG="zh_CN.UTF-8"
变量的有效范围
环境变量可以被子进程使用,类似于全局变量,其余变量不可以被子进程使用,类似于局部变量。
变量键盘的读取、数组与声明:read,array,declare
read
读取来自键盘输入的变量
read [-pt] 变量名
参数:
-p:后面可以接提示符
-t:后面接等待的秒数
[[email protected] 桌面]# read -p "please input your name:" -t 20 name please input your name:wuchao [[email protected] 桌面]# echo $name wuchao [[email protected] 桌面]#
declare/typeset
declare和typeset是一样的功能,就是声明变量的类型
如果declare后面不接任何参数,功能和set一样,显示所有变量和内容
declare [-aixr] 变量名
参数:
-a:将变量定义为数组
-i:将变量定义为整型
-x:定义为环境变量
-r:将变量定义为readonly,不能更改内容,也不能重设
//变量类型默认为字符串 [[email protected] 桌面]# sum=100+200+300 [[email protected] 桌面]# echo $sum 100+200+300 //定义为整型,后面才会当成计算式 [[email protected] 桌面]# declare -i sum=100+200+300 [[email protected] 桌面]# echo $sum 600 [[email protected] 桌面]#
数组类型:
[[email protected] 桌面]# var[1]="cat" [[email protected] 桌面]# var[2]="dag" [[email protected] 桌面]# var[3]="monkey" [[email protected] 桌面]# echo "${var[1]},${var[2]},${var[3]}" cat,dag,monkey [[email protected] 桌面]#