变量键盘读取、数组与声明:read,array,declare
read
read [-pt] variable
参数:
-p : 后面可以接提示符
-t : 后面可以接等待的秒数。
# read -p "Please keyin your name :" -t 30 named
提示用户30秒内输入自己的大名,将该输入字符串作为名为named的变量内容
declare
declare/typeset
declare 或typeset是一样的功能,就是声明变量的类型。如果使用declare后面并没有接任何参数,那么bash就会主动将所有变量名称与内容全部调出来。
declare [-aixr] variable
参数:
-a : 将后面名为variable的变量定义成为数组(array)类型
-i : 将后面名为variable 的变量定义成为整数数字(integer)类型
-x : 用法与export 一样,就是将后面的variable变成环境变量
-r : 将变量设置成为 readonly 类型,该变量不可被更改内容,也不能重设
# declare -i sum=100+300+50
450
变量类型默认为“字符串”,所以不指定变量类型,则1+2为一个字符串而不是计算式。
如果需要非字符串类型的变量,那就得要进行变量的声明才行。
数组变量类型
# var[1]="small min"
# var[2]="big min"
# var[3]="nice min"
# echo "${var[1]},${var[2]},${var[3]}"
对于数组变量类型,建议直接以${数组}的方式来读取
ulimit
可以用于限制用户的某些系统资源,包括可以打开的文件数量、可以使用的CPU时间、可以使用的内存总量等。
ulimit [-SHacdfltu] [配额]
参数:
-a : 后面不接任何参数,可列出所有的 限制额度
-f : 此shell可以创建的最大文件容量,单位为KB
-l :可用于锁定的内存量
-t : 可使用的最大CPU时间
其他可以自己用man ulimit进行查看
# ulimit -f 10240
限制用户仅能创建10MB以下的容量的文件
若改天你一直无法创建一个大容量的文件,记得查看ulimit的信息。
想要复原ulimit的设置最简单的方法就是注销再登录。
变量内容的删除、替代与替换
变量设置方式 | 说明 |
---|---|
${变量#关键字} | 若变量内容从头开始的数据符合“关键字”,则将符合的最短数据删除 |
${变量##关键字} | 若变量内容从头开始的数据符合“关键字”,则将符合的最长数据删除 |
${变量%关键字} | 若变量内容从尾向前的数据符合“关键字”,则将符合的最短数据删除 |
${变量%%关键字} | 若变量内容从尾向前的数据符合“关键字”,则将符合的最长数据删除 |
${变量/旧字符串/新字符串/} | 若变量内容符合“旧字符串”,则第一个旧字符串会被新字符串替换 |
${变量//旧字符串/新字符串} | 若变量内容符合“旧字符串”,则全部的旧字符串会被新字符串替换 |
命令别名设置: alias , unalias
# alias lm='ls -l | more'
至于如果要取消命令别名的话,可以使用unalias
# unalias lm
历史命令:history
history [n]
history [-c]
history [-raw] histfiles
参数:
n : 数字,是要列出最近的n条命令行的意思
-c : 将目前的shell中的所有的history内容全部消除
-a : 将目前新增的history命令新增入histfiles中,若没有加histfiles,则默认写入~/.bash_history
-r : 将histfiles的内容读到目前这个shell的history记忆中。
-w : 将目前history记忆内容写入histfiles中
# history 3
# !number
# !command
# !!
参数:
number : 执行第几条命令的意思
command : 由最近的命令向前搜寻命令串开头为command的那个命令,并执行
!! : 就是执行上一个命令
# !66
# !!
# !al
bash 的登录于欢迎信息: /etc/issue,/etc/motd
你想要让用户登陆后取得一些信息,例如你想要让大家都知道的信息,那么可以将信息加入/etc/motd 里面去。
# vi /etc/motd
Hello everyone
bash 的环境配置文件
我们前面讲过,命令别名、自定义变量在你注销bash后就会失效,所以你想保留你的设置,就得要将这些设置写入配置文件才行。
login shell : 取得bash时需要完整的登录流程的,就称为 login shell。
non-login shell : 取得bash接口的方法不需要重复登录的举动。
login shell 其实只会读取下面两个配置文件:
- /etc/profile :这是系统整体的设置,最好不要修改
- ~/.bash_profile 或 ~/.bash_login 或 ~/.profile : 属于用户个人设置,你要改自己的数据,就写入这里。
/etc/profile (login shell 才会读 )
设置整体环境,没事不要随便修改
这个文件设置的主要变量有:
PATH : 会依据UID决定PATH变量要不要含有sbin的系统命令目录;
MAIL : 依据账号设置好用户的mailbox 到 /var/spool/mail/账号名;
USER: 根据用户的账号设置此变量的内容;
HOSTNAME: 依据主机的hostname命令决定此变量内容;
HISTSIZE: 历史命令记录条数。
它还会去调用外部的设置数据
- /etc/inputrc
其实这个文件并没有被执行。不建议修改 - /etc/profile.d/*.sh
其实这是个目录内的众多文件。在/etc/prifile.d/这个目录内且扩展名为.sh ,另外用户能有r的权限,该文件就会被/etc/profile调用。 - /etc/sysconfig/i18n
这个文件是由/etc/profile.d/lang.sh调用的。也是bash默认使用何种语系的重要配置文件。
~/.bash_profile(login shell 才会读)
bash 在读完了整体环境设置的/etc/profile并借此调用其他配置文件后,接下来则会读取用户的个人配置文件。在login shell的bash环境中,所读取的个人偏好配置文件其实主要有三个:
- ~/.bash_profile
- ~/.bash_login
- ~/.profile
其实bash的login shell 设置只会读取上面三个文件的其中一个,而读取的顺序则是依照上面的顺序。
其实~/.bash_profile会再调用 ~/.bashrc 的设置内容。
source : 读入环境配置文件的命令
source 配置文件名
# source ~/.bashrc
将主文件夹的 ~/.bashrc 的设置读入目前的bash环境中
# . ~/.bashrc
利用source 或小数点(.)都可以将配置文件的内容读进目前的shell环境中。
~/.bashrc (non-login shell 会读)
这里面会主动调用/etc/bashrc这个文件,而/etc/bashrc帮我们定义出下面的数据:
- 依据不同 的UID规定umask的值
- 依据不同的UID规定提示符(就是PS1变量)
- 调用/etcprofile.d/*.sh的设置
- 其他相关配置文件: /etc/man.config 、~/.bash_history 、~/bash_logout