shell

cat /dev/null:清空某个文件
echo $?:查看返回值

查看当前系统所有的shell:cat /etc/shells

chsh -l

查看当前登录的shell:echo $SHELL
查看历史命令:history
使用第70个历史命令:!70
执行以某个字母开头的命令:![字母]
执行最后一次执行过的历史命令:!!
显示上一个命令最后一部分:echo !$
查看和设置别名:alias
取消别名:unalias
取消alias作用:\[命令]
存放alias的位置:家目录的bashrc里
查看系统所以环境变量:env

预定义变量:

读入标准输入:read
运算符:expr = $(())
取出命令的结果:`` = $()
显示当前程序进程名:$0
显示当前程序进程号:$$
显示位置参数的个数:$#
显示位置参数的内容:$*
转义字符:\
完全引用:‘’
部分引用:“”

整数变量:

+、-、*、/、()
expr或$(())操作符:
+、-、\*、/、%取余(取模)

通配符置换:
匹配 0 或多个字符:*
匹配任意一个字符:?
匹配 list中的任意单一字符:[list]
匹配 除list中的任意单一字符:[!list]
匹配 c1-c2中的任意单一字符:[c1-c2]
匹配 sring1或 string2(或更多)其一字符串:{string1,string2,...}

变量替换:

${a:-字符}
若 a为空或未设置,则用“字符”代替a进行替换,a的值不变
当a没有赋值时
echo ${a:-tom}结果为:tom
echo $a结果为空
${a:+字符}
若 a设置了,则用 “字符”代替 a进行替换,a的值不变
当a=bob时
echo ${a:+tom}结果为:tom
echo $a结果为:bob
${a:=字符}
若 a为空或未设置,则 a设为值 “字符”
当a=bob时
echo ${a:=tom}结果为:bob
echo $a结果为:bob
当a没有赋值时
echo ${a:=tom}结果为:tom
echo $a结果为空
${a:?提示}
若 a为空或未设置,则 “提示”作为标准错误打印出来,这可用来检查变量是否正确设置
当a=bob时
echo ${a:?a没有赋值}结果为:bob
echo $a结果为:bob
当a没有赋值时
echo ${a:?a没有赋值}结果为:bash: a: a没有赋值
echo $a结果为空

匹配截取:

${a:要截取的个数}
截取从头开始“要截取的个数”,留下剩下的
当a=abcdefg时
echo ${a:3}的结果为:defg
${a:要截取的个数:要留下几个}
截取从头开始“要截取的个数”个,留下“要留下几个”个,如果要留下的个数大于剩下的则全部留下
当a=abcdefg时
echo ${a:2:3}的结果为:cde

当a=001234146
最短头匹配截取:${a#关键词}
echo ${a#*1}结果为:234146
echo ${a#0*2}结果为:34146
最长头匹配截取:${a##关键词}
echo ${a##*1}结果为:46
最短尾匹配截取:${a%关键词}
echo ${a%4*}结果为:0012341
最长尾匹配截取:${a%%关键词}
echo ${a%%4*}结果为:00123
替换第一次被匹配到的:echo ${a/旧字符串/新字符串}
echo ${a/1/q}结果为:00q234146
替换所有被匹配到的:echo ${a//旧字符串/新字符串}
echo ${a//1/q}结果为:00q234q46
取变量值的长度:echo ${#变量}
echo ${#a}结果为:9个

定义数组变量:

a[2]="tom"
a[4]="bob"
echo ${a[2]}
显示定义所有的数组内容echo ${a[*]}或echo ${a[@]}
显示数组的长度echo ${#a[*]}
declare -a 定义数组变量
declare -r 定义只读变量
declare -i 定义整数变量
declare -x = expor定义环境变量

函数:

取消回显:stty -echo
显示回显:stty echo

局部生效参数local


test测试命令:
条件为真返回 0,条件为假返回 1
三种类型的表达式:文件测试、字符串比较、数字比较
表达式1 -a 表达式2:同时满足两个表达式,与运算
表达式1 -o 表达式2:只满足其中一个表达式即可,或运算
字符串:-n字符串长度不为零
-z字符串长度为零
=两个字符串相等
!=两个字符串不相等
数字: -eq 等于
-ne 不等于
-ge 大于等于
-gt 大于
-le 小于等于
-lt 小于
-ef 有相同的I节点或设备
-nt 前者的修改时间早于后者
-ot 前者的修改时间晚于后者
文件:-f 存在且是正规文件
-d 存在且是目录
-h 存在且是符号链接
-b 块设备
-c 字符设备
-e 文件存在
-r 是否可读
-w 是否可写
-x 是否可执行

判断语句:

if开头,fi结尾,then执行命令,elif当前面的结果为假则执行下面的then,else以上都不匹配则执行下面的命令(if后用test或[]来判断和定义变量)

标准输入:0
标准正确输出:1
标准错误输出:2

case开头,esac结尾,如果所定义的变量等于下面已定义好的值,则执行该值的命令

调用已有函数: . 函数文件的绝对路径

循环:

for:
1、shell模式:for [ 变量 ] do 循环体 done
2、c语言模式:for [ 变量 ] { 循环体 }
seq算法:
seq 1 2 10结果为1、3、5、7、9
seq 2 2 10结果为2、4、6、8、10
打印不换行printf
打印换行echo

while:
条件成立时执行do和done里的循环体

until:
条件不成立时执行do和done里的循环体

break 终止
continue 跳出

select:
交互式shell脚本


Shell程序调试
sh –x [脚本名]
这将执行该脚本并显示所有变量的值
sh –n [脚本名]
不执行脚本只是检查语法模式,将返回所有错误语法
sh –v [脚本名]
执行脚本前把脚本内容显示在屏幕上


basename和dirname命令
basename /etc/passwd结果为:passwd
dirname /etc/passwd结果为:/etc

posted @ 2017-05-16 12:35  super-sos  阅读(126)  评论(0编辑  收藏  举报