1)在当前shell中直接定义变量然后在当前环境直接输出输出是可行的:
2)也可以建立一个脚本,写入变量输出,再去调用脚本。如下所示,使用“sh westos.sh”方法输出变量是不会有所显示的,因为这样调用脚本默认会重新开启一个shell运行,而变量在当前的环境中,所以不会显示;使用“. westos.sh ”或“source westos.sh”都是在当前的shell中运行脚本,所以可以显示变量值:
环境级别的变量,在环境关闭后,变量就会失效。定义方法是“export a=1”
1)定义环境级别的变量,使用不同的方式运行脚本,如下所示:
用户级别变量,只有该用户生效,其他用户不生效。
1)编辑~/.bash_profile文件设定用户级别的变量:
2)先运行source ~/.bash_profile使该设定生效,然后在当前用户的环境下调用该脚本,发现变量生效,退出该环用户再登陆上时,变量依旧生效:
系统级变量除了该系统外,在其余系统不生效。为了使得切换用户后变量生效,可以对系统级别的配置文件进行修改。系统级别的变量定义有两种方式,一个是编辑 /etc/profile 主配置文件;一个是在 etc/profile.d/目录下再建立一个脚本文件。通常是在 etc/profile.d/目录中新建脚本文件。
1) 编辑vim /etc/profile.d/lhy.sh,写入系统级变量,然后运行source /etc/profile.d/lhy.sh使该设定生效;切换用户运行脚本,变量依然有效:
符号 | 含义 |
---|---|
\ | 转译单个字符 |
“ ” | 弱引用,批量转译个数字符,不能转译“\”,"`","$","!" |
’ ’ | 弱引用 |
下图表明“\”只能转译单个字符,而双引号可以批量转译:
双引号不能转译的特殊符号:
下图表示双引号的引用性要弱于单引号:
A=1 ##定义一个变量
echo $AB ##此时表示AB是一个变量名,而系统中不存在该变量,所以输出值为空
echo ${
A}B ##此时会输出1B,表示系统将A看作变量
表示方法 | 含义 |
---|---|
echo ${a[0]} | 数组中第一个元素 |
echo ${a[-1]} | 数组中最后一个元素 |
echo ${a[*]} | 数组中所有元素,*表示所有的数组元素是一个整体 |
echo ${a[@]} | 数组中所有元素,@表示每个元素都是个体 |
echo ${a[@]:0:3} | #数组中1-3个元素 |
echo ${#a[@]} | 数组中元素的个数 |
只针对当前用户生效。
1)编辑vim ~/.bashrc文件,写入别名设定,输入source ~/.bashrc使设定生效:
只在当前系统中生效。
1)编辑vim /etc/bashrc 文件,输入别名设定。查看生效;切换用户,查看依旧生效:
1)将/etc/bashrc 和~/.bashrc两个文件中的别名设定都删除,然后查看,发现别名设定依然存在:
2)使用“unalias xie”命令进行删除,删除完后再查看,别名设定消失:
用户在操作系统时使用的命令搜索路径称为环境变量
编辑~/.bash_profile文件,输入export PATH=$PATH:/mnt;source ~/.bash_profile使设定生效,然后echo $PATH查看,可以看到/mnt;切换用户后输入echo $PATH则无法看到:
同理,编辑/etc/.bash_profile文件,输入export PATH=$PATH:/mnt;source /etc/.bash_profile使设定生效,然后echo $PATH查看,可以看到/mnt;切换用户后输入echo $PATH依旧可以看到
1)输入“date +%H:%M:%S”命令,表示显示时间,几点几分几秒;将该值赋值给TIME,可以看到这样直接赋值是不行的:
2)要将该命令的执行结果赋给变量可以给命令加上$(),但是这种方式只适合shell,输出该参数查看:
3)还可以用反向单引号引起来,这种方式适合于多种语言和环境,输出该参数查看:
参数 | 含义 |
---|---|
$0 | 脚本本身 |
$1 | 脚本后输入的第一串字符 |
$2 | 脚本后输入的第二串字符 |
$3 | 脚本后输入的第三串字符 |
$* | 脚本后所输入的所有字符,*表示将所有字符当一个字符串输出 eg:“westos linux python” |
$@ | 脚本后所输入的所有字符 ,@表示将所有字符分别看作多个字符 eg:‘westos’ ‘linux’ ‘python’ |
$# | 脚本后输入的字符串个数 |
2)运行该脚本,并在后面不断写入字符串,其结果如下,该结果可说明各个参数的含义:
注意:编写shell头部时,~./vimrc文件是对当前的用户起作用,想要对系统中所有用户起作用,需要编辑etc/vimrc文件
命令 | 含义 |
---|---|
read WESTOS | 对WESTOS赋值 |
read -P “please input word” | 输出提示语 |
-s | 隐藏输入内容,即没有回显的显示 |
1)输入“read test ”命令,相当于给 test= 赋一个值,下面输入一个值,这两行操作总的来说表示test=hello lhy;查看test参数的值:
2)输入“read -p "input: " test ”命令,当read后只写参数什么都不加时,是没有提示的,所以加上 input表示输入,只所有带引号是要把input后面的空格转译;查看test参数的值:
3)编写一个脚本测试,输入hhhhhh后,会自动再显示一遍变量的值:
函数的使用可以简化代码,使得代码的结构更清晰,编写脚本,将一段脚本使用函数的方式书写,进行对比:
脚本运行结果,如此可以看出,函数可以减少大量重复代码的书写,使得代码简洁易懂;函数还可以实现递归调用:
注意:当函数中不需要传参数时,调用函数直接在相应的地方写如函数名即可,不需要添加()和其他参数;需要查un参数时,也不需要(),脚本中函数的调用与其他语言不一样,直接在后面写参数即可
1)建立一个名为userfile_user.sh的脚本,当脚本后面加上userfile用户名单及密码文件时,该文件里面的用户全部被建立:
测试脚本运行:
2)建立一个名为create_user.sh的脚本,脚本后写用户名,若用户名存在,则提示该用户存在,再次输入用户名称,直至输入的用户不存在;若用户名不存在,就提示输入密码,且密码无回显,然后将该用户建立出来;直到用户输入exit退出脚本: