一、变量的定义:
- 变量就是内存一片区域的地址(用一个字符串表示内存地址的方式)
变量存在的意义:命令无法操作一直变化的目标,用一串固定的字符来表示不固定的目标可以解决此问题
二、 shell脚本中变量的定义方法
变量名称可包含的字符;字母、下划线_、数字
变量名称定义规则;不能用数字开头
建议:
变量名称短全用大写字符
变量名称长用_区分子类
WESTOS
Westos_Linux
westoS_Linux
- 临时设定a为1,并写入脚本
用sh无法运行出脚本内容,用 . 可以运行脚本得到正确结果,因为sh 的运行方式会在当前shell中重新开启了一个子shell ,因此变量的值没有被传递到子shell中,所以无法得到运行结果。
(1)环境级别定义变量
export a=1
声明export:让当前shell的所有子程序都可以识别设定的内容,此时sh 可以运行脚本,得到运行结果。
但exit退出当前shell后,重新开启一个shell ,仍然得不到运行结果,这是因为在环境关闭后变量失效;
即刚才的shell结束后,它在内存中的所有数据都被系统回收了,打开新的shell ,是一个新的内存的地址,所以在寻址时无法得到a的内容
(2)用户级别
编辑配置文件vim ~/.bash_profile
export a=1
source 运行~/.bash_profile文件,sh 可以得到脚本运行结果
但切换到westos用户,仍得不到脚本运行结果,因为它读取不到配置文件的内容
(3)系统级别
切换到 /etc/profile.d 目录
编辑文件 /etc/profile.d/westos.sh
westos也得用sh 得到脚本运行结果
env 查看内建变量,用于显示系统中已存在的环境变量,可以看到所设定的变量a=1
- 删除设定的变量:
1、删除系统级别配置目录下的westos.sh文件;
2、将用户级别配置文件里的设定删除;
3、unset a:删除变量a
env 查看内建变量,可以看到所设定的变量a=1消失
系统的shell也是变量
PS1 :设定执行命令的提示符(临时的)
三、变量的转译
- (1)转译
\ :转译单个字符
" " :弱引用,批量转译个数字符
’ ’ :强引用 - $$:当前程序的ID
” “不能转译 \ 、! 、’ 、 $
(2)声明
对于 a 做变量声明,a 是变量,b 不是变量。
(3)变量的数组
echo $a :显示数组中第一个元素;
echo ${a[0]} :数组中第一个元素
echo ${a[-1]} :数组中最后一个元素
echo ${a[*]} :数组中所有元素
echo ${a[@]}:数组中所有元素
echo ${#a[@]}::数组中元素的个数
echo ${a[@]:0:3} :数组中第一个到第三个元素;
echo ${a[@]:5:3} :数组中从第五个元素往后的三个元素;
echo ${a[@]:3:3} :数组中从第3个元素往后的三个元素;
unset a[n] :删除数组中的第n个元素;
unset a :删除a这个数组;
a[0]=1:对数组的第一个元素进行赋值
四、Linux中命令的别名设定
- ls 和 /bin/ls 两条指令的内容相同,颜色却不同,这是因为ls 其实表示的是/usr/bin/ls这个指令
alias:查看别名
alias xie=‘vim’ :临时设定别名;
此时执行xie,即可打开一个vim
exit退出当前shell,再次进入shell,xie指令没有了
编辑shell的配置文件vim ~/.bashrc
source 运行文件之后,即可看到设定的别名
但切换到westos用户,xie命令找不到
编辑vim /etc/bashrc 文件:针对系统所有用户生效;
在文件的最后一行写上alias xie=‘vim’
此时westos也能执行xie指令,打开一个vim
alias可以看到定义的别名
删除当前环境中的alias
五、用户环境变量的更改
- 在Desktop 无法通过文件名直接执行linux.sh脚本文件;
echo $PATH 显示当前PATH环境变量,该变量的值由一系列以冒号分隔的目录名组成
编辑配置文件~/.bash_profile,在原始的环境变量的基础上在加一个 /mnt;
source 运行文件之后,即可在Desktop 通过文件名直接执行linux.sh脚本文件
- 脚本中的传参
- 1、非交互模式:
编辑westos.sh脚本文件;
$0: 脚本本身
$1 :脚本后所输入的第一串字符
$2 :脚本后所输入的第二串字符
$* :脚本后所输入的所有字符"westos linux redhat"(一串字符)
$@:脚本后所输入的所有字符’westos’ ‘linux’ ‘redhat’(三串字符)
$# :脚本后所输入的字符串个数
运行脚本
编辑 test.sh 脚本文件,对word进行变量定义;
sh -x:调试shell脚本 ,-x 可用来跟踪脚本的执行;
当使用" ¥* “时,可以看到脚本执行了一次
当使用” ¥@ “时,可以看到脚本执行了三次
编辑test.sh文件,测试ping主机;
当使用” ¥@ “时,脚本文件后接了两个IP,运行成功
当使用” ¥* "时,脚本文件后接了两个IP,运行失败,因为此时默认接的是一个字符串
2、交互模式传参:
read WORD :对WORD赋值
read p "please input word: " :输出提示语
s :隐藏输入内容
第二行表示换行,此时输入的WORD值就被隐藏了
脚本函数(程序的别名)
将函数写入函数内部,可以循环调用
加入exit,优化脚本
- 练习脚本
写一个脚本名为 create-user.sh 的脚本,用来创建和删除用户。
1、输入一个用户名,当该用户存在时,显示用户存在;
2、重新输入用户名,当该用户不存在时,提示输入该用户的密码,之后自动建立该用户,并将设定的密码给该用户,最后显示该用户已建立;
3、当输入exit时,退出此脚本