Linux系统管理与编程14:Shell变量及定制bash登录界面
兰生幽谷,不为莫服而不芳;
君子行义,不为莫知而止休。
1.准备工作
创建用户wu
useradd wu passwd wu |
修改权限
chmod u+w /etc/sudoers |
编辑
visudo |
在root行下,添加:“wu ALL……”
图14- 1
恢复文件权限并做登录测试
[root@shell wu]# chmod u-w /etc/sudoers [root@shell wu]# su wu 欢迎来到巫正中的SHELL工作室 _..._ .' '. / _ _ \ | (o)_(o) | \( ) / //'._.'\ \ // . \ \ || . \ \ |\ : / | \ `) ' (` /_ _)``".____,.'"` (_ ) )'--'( ( '---` `---` [wu@shell ~]$ sudo ls /root [sudo] wu 的密码: anaconda-ks.cfg |
2.系统变量
查看系统变量
[wu@shell ~]$ printenv XDG_SESSION_ID=42 HOSTNAME=ftp SHELL=/bin/bash TERM=xterm HISTSIZE=1000 SSH_CLIENT=192.168.100.1 64190 22 SSH_TTY=/dev/pts/4 USER=wu 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:mi=01;05;37;41: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:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=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:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=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=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36: PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/wu/bin:/usr/bin:/usr/local/bin:/usr/sbin:/usr/local/sbin:/sbin MAIL=/var/spool/mail/wu PWD=/home/wu LANG=zh_CN.UTF-8 PS1=\[\e[31m\][\[\e[m\]\[\e[38;5;172m\]\u\[\e[m\]@\[\e[38;5;153m\]\h\[\e[m\] \[\e[38;5;214m\]\W\[\e[m\]\[\e[31m\]]\[\e[m\]\$ HISTCONTROL=ignoredups HOME=/home/wu SHLVL=4 LOGNAME=wu SSH_CONNECTION=192.168.100.1 64190 192.168.100.23 22 LESSOPEN=||/usr/bin/lesspipe.sh %s XDG_RUNTIME_DIR=/run/user/1001 _=/usr/bin/printenv |
3.自定义变量
3.1变量赋值
1)字符串赋值:shell默认是字符串赋值
[wu@shell ~]$ var01=wzz [wu@shell ~]$ echo $var01 wzz [wu@shell ~]$ var02="wzz" [wu@shell ~]$ echo $var02 wzz |
2)数值赋值
[wu@shell ~]$ var03=1 [wu@shell ~]$ var04=$var03+1 [wu@shell ~]$ echo $var03 1 [wu@shell ~]$ echo $var04 1+1 [wu@shell ~]$ let var04=$var03+1 [wu@shell ~]$ echo $var04 2 [wu@shell ~]$ let var05=2+1 [wu@shell ~]$ echo $var05 3 |
3)激活转义字符
[wu@shell ~]$ var06='pwd' [wu@shell ~]$ echo $var06 pwd [wu@shell ~]$ var07=$(pwd) [wu@shell ~]$ echo $var07 /home/wu [wu@shell ~]$ var08=10 [wu@shell ~]$ echo "这个数是:$var08" 这个数是:10 [wu@shell ~]$ echo -e "用户:$USER\t家目录:$HOME\n" 用户:wu 家目录:/home/wu [wu@shell ~]$ echo -n "输入你身份证号:";read ID 输入你身份证号:12345678 [wu@shell ~]$ echo $ID 12345678 |
4)echo打印
[wu@shell ~]$ LOGDIR=/var/log/ [wu@shell ~]$ echo "日志文件是${LOGDIR}messages" 日志文件是/var/log/messages [wu@shell ~]$ LIST="一二三" [wu@shell ~]$ for var in $LIST > do > echo "$var" > done 一二三 [wu@shell ~]$ LIST="一 二 三" [wu@shell ~]$ for var in $LIST > do > echo "$var" > done 一 二 三 [wu@shell ~]$ for var in "$LIST" > do > echo "$var" > done 一 二 三 |
5)删除变量
unset ID |
图14- 2
6){}扩展
[wu@shell ~]$ echo a{1..15}d a1d a2d a3d a4d a5d a6d a7d a8d a9d a10d a11d a12d a13d a14d a15d [wu@shell ~]$ echo {a..e}{1..3} a1 a2 a3 b1 b2 b3 c1 c2 c3 d1 d2 d3 e1 e2 e3 [wu@shell ~]$ echo 87021{01..52} 8702101 8702102 8702103 8702104 8702105 8702106 8702107 8702108 8702109 8702110 8702111 8702112 8702113 8702114 8702115 8702116 8702117 8702118 8702119 8702120 8702121 8702122 8702123 8702124 8702125 8702126 8702127 8702128 8702129 8702130 8702131 8702132 8702133 8702134 8702135 8702136 8702137 8702138 8702139 8702140 8702141 8702142 8702143 8702144 8702145 8702146 8702147 8702148 8702149 8702150 8702151 8702152 [wu@shell ~]$ echo {870201..870249..5} 870201 870206 870211 870216 870221 870226 870231 870236 870241 870246 |
4.变量打印综合应用:定制自己的BASH登录界面
bash登录界面在家目录里面:
图14- 3
图14- 4
编制一个自己喜欢的颜色及显示相关信息的界面,处理~/.bash_profile和~/.bashrc
# .bash_profile # Custom Command Prompt export PS1="\n\e[1;32m[\e[0;31m\u\e[0;34m@\e[0;31m\h\e[1;32m]\e[1;32m[\e[0;34m\w\e[1;32m]$ " # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin:/usr/bin:/usr/local/bin:/usr/sbin:/usr/local/sbin:/sbin export PATH unset USERNAME umask 022 # Custom DJRavine Modification login_pwd=`pwd`; login_date=`date`; login_users=`users`; login_uptime=`uptime`; server_ip=`/sbin/ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | head -1 | cut -d: -f2 | awk '{ print $1}'`; disk_available=$(df -h --block-size=1024 | awk '{sum += $4;} END {print sum;}'); disk_used=$(df -lh --block-size=1024 | awk '{sum += $3;} END {print sum;}'); disk_size=$(df -lh --block-size=1024 | awk '{sum += $2;} END {print sum;}'); disk_available_gb=$(echo "scale=2; $disk_available/(1024^2)" | bc) disk_used_gb=$(echo "scale=2; $disk_used/(1024^2)" | bc) disk_size_gb=$(echo "scale=2; $disk_size/(1024^2)" | bc) red="\033[31m" blue="\033[34m" green="\033[32m" echo -e " " echo -e "${blue}+---------------------------------------------------------------------------" echo -e " ${green} Welcome to Wu Zhengzhong's SHELL HOME! " echo -e "${blue}+---------------------------------------------------------------------------" echo -e " ${green}Server IP及端口: ${red}"$SSH_CLIENT echo -e " ${green}日期: ${red}"$login_date echo -e " ${green}用户: ${red}"$login_users echo -e " ${green}登入目录: ${red}"$login_pwd echo -e " ${green}运行时间: ${red}"$login_uptime echo -e "${blue}+---------------------------------------------------------------------------" df -lh | column -c 6 | awk '{ printf " \033[22;32m%s\t%s\t\033[22;31m%s\t%s\t%s\n", $1, $6, $2, $3, $4,$5 }' echo -e " ${green}Total Disk Space: ${red}${disk_size_gb} GB" echo -e " ${green}Total Free Space: ${red}${disk_available_gb} GB" echo -e " ${green}Total Used Space: ${red}${disk_used_gb} GB" echo -e "${blue}+---------------------------------------------------------------------------" |
再处理.bashrc
alias l.='ls -d .* --color=tty' alias ll='ls -l --color=tty' alias ls='ls --color=tty' export PS1="\[\e[31m\][\[\e[m\]\[\e[38;5;172m\]\u\[\e[m\]@\[\e[38;5;153m\]\h\[\e[m\] \[\e[38;5;214m\]\W\[\e[m\]\[\e[31m\]]\[\e[m\]\\$ " cat<<'EOF' 欢迎来到巫正中的SHELL工作室 _..._ .' '. / _ _ \ | (o)_(o) | \( ) / //'._.'\ \ // . \ \ || . \ \ |\ : / | \ `) ' (` /_ _)``".____,.'"` (_ ) )'--'( ( '---` `---` EOF |
看看登录效果:
图14- 5
【后记】
学好了变量,也接触到了简单的调用,为后边的自动化运维打下了基础。