Linux下的变量、系统别名和退出值

1、shell中的变量
父进程结束后,子进程还未结束,会由初始化进程接管
父进程和子进程都结束后,还存在的进程成为僵尸进程,会一直占用系统空间使得系统崩溃
(1)环境级
[root@desktop mnt]# a=1
[root@desktop mnt]# echo $a
1
[root@desktop mnt]# ps
[root@desktop mnt]# sh
sh-4.2# echo $a

sh-4.2# exit
exit
#sh打开另一个进程,看不到a值

这里写图片描述

[root@desktop ~]# export a=1 #export作声明
[root@desktop ~]# echo $a
1
[root@desktop mnt]# sh
sh-4.2# echo $a
1
[root@desktop ~]# su - student
[student@desktop ~]$ echo $a #为空
#export声明后,sh打开另一个进程,可以看到a值

这里写图片描述

(2)用户级
[root@desktop ~]# vim .bash_profile
export a=2
[root@desktop ~]# source .bash_profile #刷新
[root@desktop ~]# echo $a
2
[root@desktop ~]# su - student
[student@desktop ~]$ echo $a #为空

这里写图片描述

(3)系统级
[root@desktop ~]# vim /etc/profile
export a=3
[root@desktop ~]# source /etc/profile
[root@desktop ~]# echo $a
3
[root@desktop ~]# exit
[root@desktop ~]# echo $a #显示的是用户级的变量,这是因为用户级配置文件后被加载,所以其生效
2

这里写图片描述

2、环境变量
[root@desktop ~]# echo $PS1
[\u@\h \W]\$
[root@desktop ~]# PS1='westos>'
westos>PS1='westos\u>'
westosroot>PS1='westos \u>'
westos root>PS1='westos \w>' #绝对路径
westos ~>cd /etc/sysconfig/
westos /etc/sysconfig>PS1='westos \W>' #相对路径
westos sysconfig>exit
logout
3、变量的转义
\是单个的,”“是批量的,
”为\的批量,称为强引用,可以引用所有字符,包括!、\、`、$这四个字符

这里写图片描述
这里写图片描述

4、变量值的传递
$n 脚本后跟的第n串字符
$# 脚本后所跟字符数的个数
$* 脚本后跟的所有字符串,其后字符默认为一串
$@ 脚本后跟的所有字符串,其后字符默认为三串
#实验:利用脚本使用用户和密码文件建立用户,当文件不够时给出提醒
[root@desktop mnt]# vim password
[root@desktop mnt]# vim username
[root@desktop mnt]# vim user.sh
#!/bin/bash
[ "$#" -ne "2" ]&&{
echo -e "\033[31mPlease give me userfile and passwordfile\033[0m" #显示字体为红色
exit 1
} #当脚本执行是其后字符数不等于2时提醒
MAX_LINE=`wc -l $1|cut -d " " -f 1`
for LINE_NUM in `seq 1 $MAX_LINE`
do
    USERNAME=`sed -n "${LINE_NUM}p" $1`
    PASSWORD=`sed -n "${LINE_NUM}p" $2`
    useradd $USERNAME
    echo $PASSWORD | passwd --stdin $USERNAME
done
#测试:

这里写图片描述

5、read实现变量传递
#实验:交互式判断ip是否可以ping通
[root@desktop mnt]# vim read.sh
read -p "Please input ip: " -s ip #-p表示提示,-s表示用户输入时内容不可见
ping -c1 -w1 $ip &> /dev/null && echo It is up || echo It is down
#可以看到,加了-s后,输入时内容不可见

这里写图片描述

#实验:利用脚本建立用户,交互式输入用户文件和密码文件,当文件不存在时给出提醒
[root@desktop mnt]# vim user.sh
#!/bin/bash
read -p "Please input userfile: " userfile
[ -e "$userfile" ]||{
echo  -e "\033[31mThis file is not exit!\033[0m"
exit 1
}

read -p "Please input passfile: " passfile
[ -e "$passfile" ]||{
echo -e "\033[31mThis file is not exit!\033[0m"
exit 1
}

MAX_LINE=`wc -l $userfile|cut -d " " -f 1`
for LINE_NUM in `seq 1 $MAX_LINE`
do
    USERNAME=`sed -n "${LINE_NUM}p" $userfile`
    PASSWORD=`sed -n "${LINE_NUM}p" $passfile`
    useradd $USERNAME
    echo $PASSWORD | passwd --stdin $USERNAME
done
#测试:

这里写图片描述

6、系统中命令别名的设定
[root@desktop ~]# alias xie='vim' #临时设定别名
[root@desktop ~]# xie file
[root@desktop ~]# su - student
[student@desktop ~]$ xie
bash: xie: command not found...
[student@desktop ~]$ exit
logout
[root@desktop ~]# vim .bashrc #root用户永久设定别名
[root@desktop ~]# source .bashrc
[root@desktop ~]# xie file
[root@desktop ~]# su - student
[student@desktop ~]$ xie
bash: xie: command not found...
[student@desktop ~]$ exit
logout
[root@desktop ~]# vim /etc/bashrc #系统永久设定别名
[root@desktop ~]# source /etc/bashrc
[root@desktop ~]# xie file
[root@desktop ~]# su - student
[student@desktop ~]$ xie file

这里写图片描述

[root@desktop ~]# vim .bashrc #取消设定别名
[root@desktop ~]# vim /etc/bashrc
[root@desktop ~]# source .bashrc
[root@desktop ~]# source /etc/bashrc
[root@desktop ~]# xie file #删除文件中的设定行仍然成立,因为原有的设定不会被覆盖
[root@desktop ~]# unalias xie #撤销命令别名设定
[root@desktop ~]# xie file

这里写图片描述

7、exit退出值
利用命令执行结果设定变量
$?是命令在执行完成后产生的退出值,范围是[0-255]
$?=0时表示命令执行没有错误输出,这个值可以用exit命令执行,如exit66
#实验:利用退出值判断ip是否通
[root@desktop mnt]# vim ip_check.sh
read -p "Please input ip: " ip
ping -c1 -w1 $ip &> /dev/null
B="$?" #返回值赋给B
echo exit="$B"
[ "$B" -eq "0" ]&&{ #退出值等于0时表示通
echo "$ip is up"
}||{
echo "$ip is down"
}
#测试:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/yyyxxxs/article/details/80754378