银河麒麟V10 SP2 server Shell变量

本文详细介绍了Shell脚本中自定义变量和环境变量的定义、引用、查看及取消方法,强调了它们的作用范围。此外,还探讨了C语言中的局部变量和全局变量的区别。通过示例展示了如何在Shell脚本中设置默认编辑器,并讲解了位置变量和预定义变量的用法。同时,提到了影响Shell的其他文件如`/etc/profile`和`~/.bashrc`。文章最后给出了多个使用`read`命令读取用户输入变量的示例,以及变量定义和引用时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


变量的类型:
1. 自定义变量
定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.2.115
引用变量: $变量名 或 ${变量名}
查看变量: echo $变量名 set(所有变量:包括自定义变量和环境变量)
取消变量: unset 变量名
作用范围: 仅在当前shell中有效

2. 环境变量
定义环境变量: 方法一 export back_dir2=/home/backup
方法二 export back_dir1 将自定义变量转换成环境变量
引用环境变量: $变量名 或 ${变量名}
查看环境变量: echo $变量名 env 例如env |grep back_dir2
取消环境变量: unset 变量名
变量作用范围: 在当前shell和子shell有效
=======================================================
C语言 局部变量 vs 全局变量
SHELL 自定义变量 vs 环境变量
=======================================================
set 查看所有变量(包括自定变量和环境变量)
env(environment) 查看环境变量
=======================================================

案例:让crontab等工具它们使用的编辑器是vim,而不是默认的vi
# crontab -e
0 12 * * * ls //由于默认使用的是vi,所有没有颜色

# vim /etc/profile
export EDITOR=vim //设置默认的编辑器为vim
# source /etc/profile
# crontab -e //有颜色

系统环境变量:
留意的一些环境变量:(系统定义的) /etc/profile /etc/bashrc ~/.bashrc ~/.bash_profile
[root@xiaochen ~]# echo $PS1 //当前shell提示符
[\u@\h \W]\$
[root@xiaochen ~]# echo $HOSTNAME //当前主机名
xiaochen.uplooking.com
[root@xiaochen ~]# echo $USER //当前用户
root
[root@xiaochen ~]# echo $UID //当前用户的UID
0
[root@xiaochen ~]# echo $SHELL //当前使用的shell
/bin/bash
[root@xiaochen ~]# echo $HISTSIZE //历史命令保存条数
1000
[root@xiaochen ~]# echo $MAIL //当前用户邮件路径
/var/spool/mail/root
[root@xiaochen ~]# 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
[root@xiaochen scripts]# echo $RANDOM //产生0-32767的随机值
8018
[root@xiaochen ~]# echo $(($RANDOM%100+1)) //产生0-100的随机数99/100+1
[root@xiaochen ~]# echo $(($RANDOM%10)) //产生0-9的随机数

[root@localhost ~]# echo $LANG
zh_CN.utf8
[root@localhost ~]# yum grouplist |grep -i chinese
[root@localhost ~]# yum grouplist |grep -i "中文"
中文支持 [zh]
[root@xiaochen ~]# date
2016年 02月 20日 星期六 00:24:45 CST

[root@localhost ~]# LANG=C
[root@localhost ~]# echo $LANG
C
[root@localhost ~]# yum grouplist |grep -i chinese
Chinese Support [zh]
[root@xiaochen ~]# date
Sat Feb 20 00:24:24 CST 2016


示例1:
[root@alice bash]# cat var1.sh
#test 自定义变量和环境变量的作用范围
echo $url
echo $USER
echo $UID
echo $SHELL
echo "这个脚本的名字是:`basename $0`"

[root@xiaochen /]# basename /etc/hosts //basename:用来取出文件名
hosts

测试:
[root@alice bash]# url=www.baidu.com
[root@alice bash]# echo $url
www.baidu.com
[root@alice bash]# sh var1.sh

root
0
/bin/bash
这个脚本的名字是:var1.sh

示例2:
[root@xiaochen scripts]# vim a.sh
#!/bin/bash
export x=1
echo "IN a.sh"
echo $x
./b.sh
[root@xiaochen scripts]# vim b.sh
#!/bin/bash
echo "IN b.sh"
echo $x
测试1:
[root@xiaochen scripts]# sh a.sh
IN a.sh
1
a.sh: line 5: ./b.sh: 权限不够
[root@xiaochen scripts]# chmod +x b.sh
测试2:
如果将a.sh中的export去掉,重新执行a.sh脚本
测试3:
在测试2的基础上,去掉b.sh的的 x 权限,但是还想要达到想要的显示结果

3. 位置变量
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}

4. 预定义变量
$0 脚本名
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的PID
$! 上一个进程的PID
$? 上一个命令的返回值

[root@xiaochen ~]# echo $$ //查看当前shell的进程号
8898

示例1:
# vim test.sh
echo "第2个位置参数是$2"
echo "第1个位置参数是$1"
echo "第4个位置参数是$4"

echo "所有参数是: $*"
echo "所有参数是: $@"
echo "参数的个数是: $#"
echo "当前进程的PID是: $$"

echo '$1='$1
echo '$2='$2
echo '$3='$3
echo '$*='$*
echo '$@='$@
echo '$#='$#
echo '$$='$$

示例2:
[root@alice Desktop]# vim 2.sh
#!/bin/bash
echo "PID for 2.sh: $$"
echo "2.sh get \$A=$A from 1.sh"
A=C
export A
echo "2.sh: \$A is $A"


参考:影响bash shell的其它文件
bash登录和欢迎信息
/etc/issue 登录前显示的信息(本地登录) Ctrl+Alt+F2
/etc/issue.net 登录前显示的信息(网络登录)
/etc/motd 登录后显示的信息

示例1:
[root@directory1 ~]# vim /etc/ssh/sshd_config
Banner /etc/issue.net
[root@directory1 ~]# cat /etc/issue.net
#Red Hat Enterprise Linux Server release 6.4 (Santiago)
#Kernel \r on an \m
fei root yonghu jinzhi denglu

[root@directory2 ~]# ssh 172.16.130.132
#Red HatEnterprise Linux Server release 6.4 (Santiago)
#Kernel \r on an \m
fei root yonghu jinzhi denglu
root@172.16.130.132's password:

示例2:
[root@station103 ~]# cat /etc/motd
+--------------------------------------------+
| |
| 你当前登录的是网站服务器!!! |
| 小心您的操作!!! |
| |
+--------------------------------------------+

[root@xiaochen ~]# ssh 192.168.2.3
root@192.168.2.3's password:
Last login: Sun Mar 17 16:18:50 2013 from 192.168.2.80
+--------------------------------------------+
| |
| 你当前登录的是网站服务器!!! |
| 小心您的操作!!! |
| |
+--------------------------------------------+


变量的定义方式:
1. 显式赋值
变量名=变量值
示例:
ip1=192.168.1.251
school="BeiJing uplooking"
today1=`date +%F` //``和$()叫做命令替换
echo $today1
today2=$(date +%F)

2. read 从键盘读入变量值
read -p "提示信息: " 变量名
read -p "请输入银行卡账号: " num
read -p "请输入银行卡密码: " -t 5 -n 6 pass
echo 账号$num 密码$pass  >> /tmp/haha.txt


示例3:
# vim first.sh
#!/bin/bash
read -p "请输入要创建的目录名: " back_dir1
mkdir /tmp/$back_dir1
echo "创建目录成功"
# sh first.sh

示例4:
# vim ping2.sh
#!/bin/bash
read -p "Input IP: " ip
ping -c2 $ip &>/dev/null
if [ $? = 0 ];then
echo "host $ip is ok"
else
echo "host $ip is fail"
fi
# chmod a+x ping2.sh
# ./ping.sh

示例5:使用read截获银行卡的帐号和密码
[root@localhost scripts]# cat bank.sh
#!/bin/bash
read -p "please input your bank card account: " account
stty -echo //隐藏显示,不显示输入的密码
read -p "please input your bank card passwd:" -t 5 passwd
stty echo //恢复正常
echo
echo "account:$account password:$passwd" >> /tmp/bank.txt
echo "account:$account password:$passwd" |mail -s "hello success" alice@localhost

stty -echo:隐藏显示,但是不影响命令执行之后的结果显示

定义或引用变量时注意事项:
" " 弱引用
' ' 强引用
[root@xiaochen ~]# school=uplooking
[root@xiaochen ~]# echo "${school} is good"
uplooking is good
[root@xiaochen ~]# echo '${school} is good'
${school} is good

` ` 命令替换 等价于 $() 反引号中的shell命令会被先执行
[root@xiaochen ~]# touch `date +%F`_file1.txt
[root@xiaochen ~]# touch $(date +%F)_file2.txt

[root@xiaochen ~]# disk_free3="df -Ph |grep '/$' |awk '{print $4}'" 错误
[root@xiaochen ~]# disk_free4=$(df -Ph |grep '/$' |awk '{print $4}')
[root@xiaochen ~]# disk_free5=`df -Ph |grep '/$' |awk '{print $4}'`

### 安装 JDK 的准备工作 在 Kylin V10 操作系统上安装 JDK 前,需确认系统是否已经预装了 OpenJDK。通常情况下,银河麒麟V10SP2服务器操作系统在图形化安装过程中会默认安装 OpenJDK[^1]。 如果需要安装特定版本的 JDK(如 Oracle JDK 或其他版本),则应先卸载现有的 OpenJDK: ```bash sudo apt-get remove --purge openjdk* ``` ### 下载并解压 JDK 下载适合的操作系统的 JDK 版本。对于 ARM 架构,可以参考专门针对该架构的安装指南[^4]。假设已获取到适用于 ARM 平台的 JDK 1.8 离线安装包,则将其放置于 `/opt` 目录下,并解压缩: ```bash cd /opt tar zxvf jdk-8uXXX-linux-arm64-vfp-hflt.tar.gz ``` 其中 `XXX` 表示具体的更新编号。 ### 配置环境变量 编辑全局配置文件 `/etc/profile` 来设置必要的 Java 环境变量。具体操作如下所示[^3]: ```bash vim /etc/profile ``` 向文件末尾追加以下内容: ```bash export JAVA_HOME=/opt/jdk1.8.0_XXX export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH export PATH=$PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin ``` 保存更改后退出编辑器。 为了让新的环境变量立即生效,执行下列命令刷新当前 shell session 中的环境变量设置: ```bash source /etc/profile ``` ### 测试安装结果 完成上述步骤之后,可以通过运行下面这条指令来验证 JDK 是否正确安装以及其版本号信息: ```bash java -version ``` 这将会显示所安装的 JDK 的详细版本信息[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值