1 变量的定义及种类
1.1 变量的定义:
变量即在程序运行过程中它的值是允许被改变的量;
变量是用一串固定的字符来标示不固定值的一种方法;
变量是一种使用方便的占位符,用于引用计算机的内存地址,该地址可以存储script运行时可更改的程序信息;
在shell中变量是不能永久保存在系统中的,必须在文件中声明。
1.2 变量的种类:
在shell中变量分为环境级变量,用户级变量,系统级变量。
环境级变量只在当前shell中生效,shell关闭则变量丢失
用户级变量写在用户的骨文件中,只针对当前用户生效
系统级变量被写在系统的配置文件/etc/profile或者/etc/profile.d中,对于所有的用户都生效
1.3 三种变量的定义方法:
1.3.1 环境级变量的定义方法:
只在当前环境中生效 export A=1
1.3.2 用户级变量的定义方法:
cd /root
ls -a #可以看到root用户的用户级变量文件
vim ~/bash_profile export A=1 #用户级变量的声明,需要用户退出再次登陆时,会读取该文件,
其中的变量随之才会被读取,切换成其他用户不生效
vim ~/bash_history #使用history -c清空命令后,再次连接,以前的记录仍旧存在,
当清空该文件后,记录不在
vim ~/bash_logout #用户退出时的显示,用户级
1.3.3 系统级变量的定义方法:
vim /etc/profile #所有用户都会读取该文件
export A=1
source /etc/profile
1.3.4 深入解释切换用户时加-和不加-的区别
在用su - 切换用户时,如果不加-,不会读取系统环境变量,沿用上一个用户的用户级环境变量
在/etc/profile /etc/bashrc 中分别写入
export A=2 export B=4 #/etc/bashrc是shell的环境配置文件
然后source /etc/profile /etc/bashrc
在当前用户echo $A echo $B
然后更改 /etc/profile 中export A=6,但不是source /etc/profile
su student 还用沿用上一用户环境变量A=2(su student 只读/etc/bashrc:只对shell起作用)
当su - student 中 echo $A A=6 (su - student 读/etc/bashrc /etc/profile)
2 字符的转译及变量的声明
2.1 变量名称的规范
*)变量名称的规范
变量名称中通常包含大小写字母,数字,下划线(不是必须)
变量名称规范
WESTOS_LINUX
Westos_Linux
westoS_Linux
2.2 字符的转译及变量的声明
*)字符的转译及变量的声明:
\ 转译单个字符
"" 弱引用,批量转译“”中出现的字符
'' 强引用,批量转译‘’中出现的字符
"" 是弱引用 不能引用 `` \ ! $
'' 强引用可以引用所有
${} 变量声明
例如:
A=1
echo $Ab
echo ${A}b
3 变量值传递
*)变量值传递
$0 脚本名称
$1 脚本后的第一串字符串
$2 脚本后的第二串字符串
$3 脚本后的第三串字符串
$# 脚本后所跟字符串的个数
$* 脚本后跟的所有字符串,模式为“1 2 3”
$@ 脚本后的所有字符串,模式为“1” “2” “3”
$$ 当前开启shell的id号
解释$*和$@的区别:
vim test4.sh
#!/bin/bash
for i in "$*"
do
echo $i
done
当sh -x test4.sh 1 2 3 4 ,执行过程为echo 1 2 3 4
vim test5.sh
#!/bin/bash
for i in "$@"
do
echo $i
done
当sh -x test5.sh 1 2 3 4 ,执行过程为echo 1 echo2 echo3 echo4
4 用read实现变量传递 实现交互式变量
用read实现变量传递 实现交互式变量
read WESTOS
read -s WESTOS #-s输入的WESTOS不会回显
read -p "input:" WESTOS
示例1:vim test6.sh
#!/bin/bash
read -p "what are you looking: " TARGET
echo "$TARGET"
示例2:
#!/bin/bash
read -p "please input ipaddress: " TARGET
ping -c1 -w1 $TARGET &> /dev/null && {
echo $TARGET is up
} || {
echo $TARGET is down
}
示例3:
#!/bin/bash
read -p "please input ipaddress: " -s TARGET
echo ""
ping -c1 -w1 $TARGET &> /dev/null && {
echo $TARGET is up
} || {
echo $TARGET is down
}
5 别名的设定与利用命令执行结果设定变量
5.1 linux系统中的别名的设定
*)linux系统中的别名的设定:
alias xie='vim'
vim ~/.bashrc alias xie='vim' 用户的环境变量 切换到其他用户就不生效
vim /etc/bashrc alias xie='vim' shell的配置,永久生效
当想删掉别名:
先把所有配置文件中的全部删掉
然后unalias xie
示例:
alias xie='vim' xie file 临时操作 退出再次登陆就不行了 相当于变量,退出就不生效
所以写到用户的shell配置文件当中
vim ~/.bashrc alias xie='vim' source .bashrc 就可以生效
但是切换到其他用户时,就不生效
vim /etc/bashrc alias xie='vim' shell的配置,永久生效
备注:命令的配置一般写在shell的配置文件/etc/bashrc中,
因为写在/etc/profile中,当用su student切换时,就不会读取当中的设置了 只有在su - student时,才会读取/etc/profile
5.2 利用命令执行结果设定变量
*)利用命令执行结果设定变量
Hostname=$(hostname)
Hostname=`hostname`
$? 是命令在执行完成之后产生的退出值 命令的退出值 不是0就是命令出错
范围是【0-255】
当$0=0时标示命令执行没有错误输出
这个值可以用exit命令执行
例如 exit 66
示例:
echo time is `date`
echo time is $(date)
Time=`date` echo $Time
``通用
$()shell中使用 不时所有的语言都识别$()
比如:vim test.pl
#!/usr/bin/perl
echo time is $(date)
perl test.pl 不可以执行
$?的示例:
命令行输入asddgdgdag
echo $? 可以查看返回值对照表 看值代表什么含义
1.vim test.sh
#!/bin/bash
echo westos
exit 66
sh test.sh
echo $?
2.使用的具体场景可以是:
#!/bin/bash
[ $USER="1000" ] && {
echo error
exit 66
}
如果不加退出值 sh test.sh echo $? 会显示0 没有错误
加了退出值 sh test.sh echo $? 会显示66 提示错误
##################################The End #########################