shell脚本语言
bash
历史命令
Tab补全
命令别名设置alias
任务管理、前台、后台控制
程序化脚本
通配符
变量
概念:就是以一组文字或符号等,来替换一些设置或 一串保留数据。
echo(打印变量)
- 加上$符
变量与变量内容以一个等号=来连接
-
等号两边不能有空格
-
变量只能是英文字母或数字,开头不能是数字
-
双引号中的特殊符保持原有的意思
-
单引号中的特殊字符则为一般文本
- 使用转义符(\)可以让特殊字符变成文本
-
增加变量的内容
PATH=$PATH:/home/bin
-
若要把局部变量变为全局变量export
-
取消变量的方法unset
unset 【变量】
环境变量的功能
-
查看默认环境变量
- env
- export
-
set查看环境变量和自定义变量
-
PS1提示字符的设置
-
$本身就是一个变量代表这个shell的进程号
- PID
-
?也是一个变量代表上一个执行的命令所返回的值,成功返回0,不成功返回相应的错误代号
影响显示结果的语系变量
-
locale
locale -a:查看linux支持的语系
-
语系定义的文件在/etc/locale.conf
变量键盘读取、数组与说明
-
read
read [-pt] 变量名
-p:后面可接提示字符
-t:后面可接等待的秒数
用法举例:
read swl
#意思为给变量swl赋值
read -p ‘快’ -t 30 swl
#打印‘快’,并且30秒后结束。- 要读取来自键盘输入的变量
-
array(数组)
-
申明数组
-
var[index]=content
- 意思为我有一个数组var
-
-
var[1]="small min"
var[2]="big min"
var[3]="nice min"
echo "${var[1]},${var[2]},${var[3]}"
#small min,big min,nice min
-
declare
declare 【-aixr】 变量名
选项和参数:
-a:将后面为变量定义为数组(array)类型。
-i:将后面为变量定义为整数(interger)类型。
-x:用法和export一样,就是将后面的变量变成环境变量。
-r:将变量设置成为readonly类型,该变量不能被更改范围。
sum=300+100
echo $sum300+100
declare -i sum=300+100
echo $sum
400-
申明变量的类型
declare的功能:
将变量设置为环境变量
declare -x sum
export | grep sum
#declare -ix sum=“450”
让sum变成只读属性,不可修改
declare -r sum
sum=testing
#不能改
让sum变成非环境变量
declare +x sum ------>将-变成+可以进行取消的操作。
-
bash环境中数值运算,默认最多仅能达到整数形态。1/3=0
变量类型默认字符串,所以若干不指定变量类型,则1+2为一个字符串而不是计算式。
变量内容的删除、取代与替换
范例一:先让小写的path自定义变量设置的与PATH一样
path=$PATH
echo $path
#范例二:假设我不喜欢local/bin,所以要将前一个目录删掉
echo ${path#/*local/bin:}
#从代表变量内容的最前面开始向右删除,且仅删除最短的那个。
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin
#以上是path本来的内容,现在来解释一下这条命令,一个#代表删除最短的,/*local/bin:,代表以/开始以local/bin:结束,*代表任意个字符。它会寻找满足条件的删除短的。
##两个#代表删除最长的。
-----------------
#是从前面开始删除,那从后面开始向前删除要使用%,和上面的#一样的用法。
-----------------------------------------
替换:
范例三:将path的变量内容的sbin替换成大写的SBIN。
也很简单。使用‘/’
echo ${path/sbin/SBIN}
#两/中间的旧字符,但是只会替换找到的第一个,后面的不替换,要替换需要加上两个/“//sbin/SBIN”
-----------------------------------
不一样替换-、:、=:?
username=${username1-root}
#username1若存在则复制给username,若不存在则给username赋值root
username=${username1:-root}
#若username为空字符串或不存在
var=${str=newer}
#给str和var变量都赋值
unset str;var=${str?无此变量}
#若无str时,则var的测试结果直接显示为“无此变量”
#若str存在,var的值会与str相同。
与文件系统及程序的限制关系ulimit
bash是可以限制用户的某些系统资源的,包括可以开启的文件数量,可以使用的Cpu时间,可以使用的内存总量
ulimit [-SHacdfltu] [配额]
-H hard limit 严格设置不能超过这个值
-S soft limit 警告的设置
-a 后面不接任何选项和参数,可列出所有的限制额度
-c 当程序发生错误时系统会将该程序在内存中的信息写成文件
-f 此shell可以建立的最大文件容量(一般为2G),单位为k
-d 程序可以使用的最大段内存容量
-l 用于锁定内存容量
-t 可以使用的最大CPU时间
#范例一:列出目前身份的所有限制数据数值
ulimit -a
#0代表没限制
范例二:限制使用者仅能建立10m一下的容量
ulimit -f 10240
命令别名设置
相当于快捷键
-
alias lm=‘ls -al | more’
-
取消快捷键
- unalias
history
n:数字,意思是【要列出最近的n条命令行表】
-c:将目前的shell中的所有history内容全部清掉
-a:将新增的history命令新增入hisfiles中,若没有hisfiles,则默认写入~/。bash_history
-r:将hisfiles的内容读到这个shelll中
-w:将目前的history写入hisfiles中。
历史命令除了用来查询外还可以用来执行
- !+命令编号
一些符号的意思
\d
- 可显示出【星期 月 日】的日期格式
\H
- 完整的主机名
\h
- 仅取主机名在第一个小数点之前的名字
\t
- 显示时间,为24小时格式【HH:MM:SS】
\T
- 显示时间,为12小时格式【HH:MM:SS】
\A
- 显示时间,为24小时格式【HH:MM】
@
- 显示时间,为12小时格式【HH:MM】
\u
- 目前用户的账号名称
\v
- BASH的版本信息
\w
- 完整的工作目录名称
#
- 执行的第几个命令