使用Shell变量

    xiaoxiao2025-05-26  93

    3.使用Shell变量 问题 本案例要求熟悉Shell变量的使用,主要练习或验证下列内容: 1)定义/赋值/查看变量 2)环境/预定义/位置变量的应用 除了学会建立和引用变量以外,还要认识环境变量PWD、USER、HOME、SHELL,还有预定义变量 0 、 0、 0 、 、 ?、KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲、*,以及位置变量$1、$2、$10、……的作用。 步骤 实现此案例需要按照如下步骤进行。 步骤一:变量的定义/赋值/查看 1)新建/赋值变量 新建变量SCHOOL,赋值“Tarena IT GROUP”,通过set命令可以检查变量设置: [root@svr5 ~]# SCHOOL=“Tarena IT” [root@svr5 ~]# set | grep SCHOOL SCHOOL=‘Tarena IT’ 2)查看变量 通过echo $变量名 可输出变量值: [root@svr5 ~]# echo $SCHOOL Tarena IT 查看变量时,若变量名称与后面要输出的字符串连在一起,则应该以{}将变量名括起来以便区分: [root@svr5 ~]# echo $SCHOOLGroup //无法识别变量名SCHOOL

    [root@svr5 ~]# echo ${SCHOOL}Group //区分后可以识别 Tarena ITGroup 3)撤销自定义变量 若要撤销已有的变量,可使用unset命令: [root@svr5 ~]# unset SCHOOL //撤销变量SCHOOL [root@svr5 ~]# echo $SCHOOL //查看时已无结果

    [root@svr5 ~]# 步骤二:使用环境变量 1)查看环境变量相关文件 全局文件为/etc/profile,对所有用户有效;用户文件为~/.bash_profile,仅对指定的用户有效。 查看/etc/profile文件内容: [root@svr5 ~]# cat /etc/profile … … if [ -x /usr/bin/id ]; then USER="id -un" LOGNAME= U S E R M A I L = " / v a r / s p o o l / m a i l / USER MAIL="/var/spool/mail/ USERMAIL="/var/spool/mail/USER" fi HOSTNAME=/bin/hostname HISTSIZE=1000 … … export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC … … 查看~/.bash_profile文件内容: [root@svr5 ~]# cat ~/.bash_profile | grep -v ^$

    .bash_profile

    Get the aliases and functions

    if [ -f ~/.bashrc ]; then . ~/.bashrc fi

    User specific environment and startup programs

    PATH= P A T H : PATH: PATH:HOME/bin export PATH unset USERNAME 2)使用环境变量 当前用户的环境变量USER记录了用户名、LOGNAME记录了登录名、HOME记录了宿主目录、SHELL记录了登录Shell、HOSTNAME记录主机名、TERM记录终端类型: [root@svr5 ~]# echo $USER $LOGNAME $HOME $SHELL root root /root /bin/bash [root@svr5 ~]# echo $HOSTNAME svr5.tarena.com [root@svr5 ~]# echo $TERM xterm 环境变量PWD记录了当前所在的路径,而OLDPWD记录了上次执行cd之前所在的路径: [root@svr5 ~]# cd /boot/grub/ [root@svr5 grub]# echo $PWD $OLDPWD /boot/grub /root //前一次工作目录为/root [root@svr5 grub]# cd - //切换到前一次的工作目录 /root //正确切回/root [root@svr5 ~]# echo $PWD $OLDPWD /root /boot/grub //此时OLDPWD自动设为/boot/grub [root@svr5 ~]# OLDPWD=/usr/src //手动修改OLDPWD值 [root@svr5 ~]# echo $PWD $OLDPWD //确认修改结果 /root /usr/src [root@svr5 ~]# cd - //再次切换前一次目录 /usr/src [root@svr5 src]# pwd //实际进入修改后的/usr/src,而不是/boot/grub /usr/src 56 环境变量PS1表示Shell环境的一级提示符,即命令行提示符(\u 用户名、\h 主机名、\W 工作目录、$ 权限标识): [root@svr5 src]# echo $PS1 //查看默认的一级提示 [\u@\h \W]$ [root@svr5 src]#PS1=‘bash-3.2$’ //修改一级提示 bash-3.2# //更改结果 bash-3.2#PS1=’[\u@\h \W]$ ’ //恢复原有设置 [root@svr5 src]# 环境变量PS2表示二级提示符,出现在强制换行、at任务编辑等场合: [root@svr5 ~]# echo $PS2 //查看默认的二级提示

    [root@svr5 src]# cd \ //强制换行,观察提示符效果

    /root/ [root@svr5 ~]# PS2=’=> ’ //手动修改二级提示 [root@svr5 ~]# cd \ //再次验证提示符效果 => ~ [root@svr5 ~]# PS2=’> ’ //恢复原有设置 3)查看系统变量 使用env可查看所有环境变量: [root@svr5 src]# env HOSTNAME=svr5.tarena.com TERM=xterm SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=192.168.4.110 59026 22 OLDPWD=/root SSH_TTY=/dev/pts/0 USER=root … … HOME=/root LOGNAME=root CVS_RSH=ssh SSH_CONNECTION=192.168.4.110 59026 192.168.4.4 22 LESSOPEN=|/usr/bin/lesspipe.sh %s DISPLAY=localhost:10.0 G_BROKEN_FILENAMES=1 _=/bin/env 使用set可查看所有变量(包括env能看到的环境变量): [root@svr5 src]# set BASH=/bin/bash BASH_ARGC=() BASH_ARGV=() BASH_LINENO=() … … 对比env、set列出的结果数量: [root@svr5 src]# env | wc -l 24 [root@svr5 src]# set | wc -l 步骤三:使用位置变量 1)创建一个测试脚本,用来展示。 [root@svr5 ~]# vim location.sh #!/bin/bash echo “您输入的第2、11个参数分别是: 2 、 2、 2{11}” [root@svr5 ~]# chmod +x location.sh //添加可执行权限 2)执行脚本location.sh,测试结果。 [root@svr5 ~]# ./location.sh one two three 您输入的第2、11个参数分别是:two、 //$2为two,$11为空 [root@svr5 ~]# ./location.sh a b c d e f g h i j k l m n 您输入的第2、11个参数分别是:b、k //$2为b,$11为k 3)利用位置参数提供2个整数,求和(运算相关知识后续章节详解) 创建求和脚本文件: [root@svr5 ~]# cat sum2int.sh #/bin/bash echo $[$1+$2] [root@svr5 ~]# chmod +x sum2int.sh //添加可执行权限 测试执行结果: [root@svr5 ~]# ./sum2int.sh 12 //参数不够或异常时报错 ./sum2int.sh: line 2: 12+: syntax error: operand expected (error token is “+”) [root@svr5 ~]# ./sum2int.sh 12 34 //输出12+34的结果 46 [root@svr5 ~]# ./sum2int.sh 123 456 //输出123+456的结果 579 步骤四:使用预定义变量 1)变量 KaTeX parse error: Expected 'EOF', got '#' at position 31: …。 [root@svr5 ~]#̲ echo 9755 [root@svr5 ~]# ps -p 9755 //检查对应PID的进程 PID TTY TIME CMD 9755 pts/0 00:00:00 bash //当前处于bash解释器环境中 2)变量 $! 会记录最近一个后台进程的PID号。 [root@svr5 ~]# sleep 300 & //创建一个后台测试进程(睡眠300秒) [1] 10710 [root@svr5 ~]# echo $! 10710 3)变量 $? 的返回值可用来识别前一条命令是否执行正常。 [root@svr5 ~]# ls -lh /etc/fstab //正常执行一条命令行 -rw-r–r-- 1 root root 733 10-09 15:34 /etc/fstab [root@svr5 ~]# echo $? //检查 $? 的值,为0说明前一条命令成功 0 [root@svr5 ~]# ls -lh /etcfstab //故意写错一条命令 ls: /etcfstab: 没有那个文件或目录 [root@svr5 ~]# echo $? //检查 $? 的值,非0说明前一条命令异常/失败/ 2 4)修改测试脚本location.sh,添加对“位置变量相关的预定义变量”的测试。 编辑脚本内容: [root@svr5 ~]# cat location.sh #!/bin/bash echo “您输入的第2、11个参数分别是: 2 、 2、 2{11}” echo "当前执行的脚本名是:$0 //$0 记录脚本名称 您一共输入了 KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲ 个位置参数 /…# 记录位置参数个数 它们是: ∗ " / / * " // "//* 记录所有位置参数的内容 执行脚本测试: [root@svr5 ~]# ./location.sh one tow 3nd 4th E F g h i j k 您输入的第2、11个参数分别是:tow、k 当前执行的脚本名是:./location.sh 您一共输入了 11 个位置参数 它们是:one tow 3nd 4th E F g h i j k

    最新回复(0)