Bash shell和变量详解
本文的结构:bash shell简介-->变量和变量操作、数组-->bash的环境配置文件分析什么是shell:
[*] 操作系统是一组软件,用于控制整个硬件和管理系统活动,若直接使用操作系统,操作不当会导致系统崩溃,用户不可随意操作,所以通过“shell”将我们输入的命令与内核通信,让内核准确的控制硬件工作
[*] shell是在操作系统上开发的应用程序,是用户可操作的最外层,也就是“shell”壳
什么是bash
[*] Bourne Again SHell,Bourne shell的增强版
[*] shell有很多版本,很多东西都一样,出现后就会有很多的发展者,像操作系统有很多种是一样的道理
[*] shell种类查看:
# cat /etc/shells // 文件记录了所有合法的shell
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
[*] 用户登录时根据 /etc/passwd 的记录获得shell
# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
bash shell 功能
[*] 命令记忆(history)
1:最多1000条
2:[-c 删除目前history] [-a 同步进文件] [-n 最近n条记录]
3:历史记录在~/.bash_history 文件中中(前一次登录以前的命令,这一次的缓存在内存中)
[*] 补全功能(Tab)
[*] 别名(alias)
[*] 作业控制、前台fg、后台bg
[*] 脚本(shell script)
[*] 通配符(Wildcard)
[*] 内置命令 type [-a 查看命令的所有来源] [-t 查看命令执行的首个来源] 命令
linux下的变量
1:什么是变量:存在于内存空间中的,一组文字或符号组成,用于替代一些设置或数据,特别是复杂或变动的数据
[*] 例1:PATH变量的值为 /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local
[*] 例2:MAIL变量用于访问邮箱,当不同用户登录shell时,MAIL就赋值为相应的用户的邮箱,如boxin用户 MAIL=/var/spool/mail/boxin,mail命令使用MAIL变量
2:变量设置规则
[*] 变量名开头不可为数字
[*] 单双引号
# lang="lang is $LANG" //双引号,保持特性
# echo $lang
lang is en_US.UTF-8
# lang='lang is $LANG' //单引号,纯文本
# echo $lang
lang is $LANG
[*] 反单引号`` 和 $()
# version=$(uname -r) //命令执行结果作为变量作为外部输入信息
# echo $version
2.6.32-431.el6.x86_64
# version=`uname -r`
# echo $version
2.6.32-431.el6.x86_64
[*] 删除变量内容
${变量#} 从头开始删掉符合#后面替换文字“最短的那个”
${变量##} 从头开始删掉符合#后面替换文字“最长的那个”
${变量%} 从后面开始删掉符合#后面替换文字“最短的那个”
${变量%%} 从后面开始删掉符合#后面替换文字“最长的那个”
[*] 变量替换
${变量/A/B} 将第一个A替换成B
${变量/ /A/B} 将所有的A替换成B
[*] 变量内容测试和替换(是否为空 或 不存在)
aname=${name-newname} // 若name 不存在,则改为newname
aname=${name:-newname} // 若name 不存在或为空,则改为newname
aname=${name=newname} //直接name改为newname
[*] 增加变量内容
# version="$version"hello
# echo $version
2.6.32-431.el6.x86_64hello
# version=${version}hello
# echo $version
2.6.32-431.el6.x86_64hellohello
[*] 取消变量:unset 变量名
3:环境变量
[*] env:(environment) 查看本shell下所有的环境变量
[*] set:查看环境变量 + 自定义变量
[*] export:将自定义变量改为环境变量
4:语系变量 locale (影响显示和结果)
# locale //usr//lib//locale
LANG=en_US.UTF-8 //主语言设置,其他语系变量会被这两个变量代替(LANGLC_ALL),一般设置LANG就ok
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
5:变量读取:read # read atest
this is a test
# echo $atest
this is a test
# read -p "your name :" named //-p提示符-t 秒数
your name :boxin
# echo $named
boxin
6:数组:例子说明,关联和一般数组差别在于:索引从0开始的数字变成自定义
[*] 一般数组
[*] 关联数组
bash的环境配置文件
结构图:
登陆欢迎信息
[*] 登录前 /etc/issue
[*] 登录后 /etc/motd
login shell
[*] 取得bash 时需完整登录流程:输入账号密码
non-login shell
[*] 不需要再次输入账户密码:进入子进程等
/etc/profile(系统整体设置,login shell会调用)调用以下三个文件目录
[*] /etc/inputre(用户有没有自定义按键功能,TAB键等)
[*] /etc/profile.d/*.sh(目录下.sh 结尾的文件会被调用,所有使用者共享命令别名)
[*] /etc/sysconfig/i18n(语系设置)
~/.bash_profile(个人配置文件,login shell才会读)
~/.bashrc(根据UID 规范 umask值 和 PS1变量,no-login shell会读)
[*] 读取/etc/profile.d/*.sh
[*] 读取/etc/bashrc(redhat 才有)
页:
[1]