$?
查看上个执行的命令的退出状态码,只能显示上一个
状态码的含义表示如下
0 命令成功结束
1 通用未知错误
2 误用shell命令
126 命令不可执行
127 没找到命令
128 无效退出参数
128+x Linux信号x的严重错误
130 Linux信号2的严重错误,即命令通过SIGINT(Ctrl+C)终止
137 表示命令被信号 9 杀死,命令被信号1杀死 退出状态码是129
255 退出状态码越界
所以平常退出能看到exit 1这种用法 exit后 后面的就不会在执行 已经退出了
shell常用片段
#如果上一条命令没有执行成功,那么xxx
if [ "$?" != "0" ];then
xxx
fi
#if 或者判断
if [ "${answer}" == "y" ] || [ "${answer}" == "Y" ]; then
xxx
fi
#一行一行的读取文件内容
cat file | while read line
do
echo $line
done
# 创建多个子级目录
mkdir -p a/{
b,c}
shell一些命令
#查看当前是哪个用户
id id | awk '{print $1}'
#列出发行版信息
lsb_release -d
tr
# tr 小型sed
# tr用于删除字符串中的字符如引号、逗号、大小写变化
# tr命令当作是 java的trim 有时候很有用
# tr 必须接收来着管道的数据
# tr 可以看作是sed的简化版本 很简单的实现sed的命令
# 接收管道的输出 cat xxx | tr ....
# 替换 比sed更简单 sed 替换换行符号会比较麻烦 用trim
# shell 替换换行符
cat xxx | tr '\n' ',' | sed 's/.$//'
# tr的替换是相同位置的替换 一定要切记!!!
# [注意] 这里,凡是在file中出现的"a"字母,都替换成"x"字母,"b"字母替换为"y"字母,"c"字母替换为"z"字母。而不是将字符串"abc"替换为字符串"xyz"。
# 所以说tr适合处理单个字符 如\n \t 这种 完整字符替换还是sed sed 's/abc/xyz/g
# 对文件名进行大小写转换 for f in `ls`; do mv $f `echo $f | tr 'A-Z' 'a-z'`; done
cat xxx | tr 'abc' 'xyz' # 会将a->x b->y c-z 这样替换 如下图示例
#[a-z] a-z内的字符组成的字符串。
#[A-Z] A-Z内的字符组成的字符串。
#[0-9] 数字串。
# 把文件中的数字0-9替换为a-j 对应替换
cat file | tr [0-9] [a-j]
#删除文件file中出现的"Snail"字符
#【注意】这里,凡是在file文件中出现的'S','n','a','i','l'字符都会被删除!而不是紧紧删除出现的"Snail”字符串。
cat file | tr -d "Snail" > new_file
# 删除空行
cat xxx | tr -s "\n" sed sed '/^$/d'
# 如果有多个空格替换 如将空格替换成 | 每一个空格都会换成 |
# 此时我们可以使用 -s 选项,压缩这些重复的空格:
cat xxx | tr -s [:space:] '\t'
# 删除 删除双引号和逗号,双引号需要转意 \"
cat xxx | tr -d ','
cat xxx | tr 'A-Z' 'a-z' # 全部转小写
cat xxx | tr 'a-z' 'A-Z' # 全部转大写
#对文件名进行批量大小写转换
for f in `ls`
do
mv $f `echo $f | tr 'A-Z' 'a-z' `
done
cut
#cut 类似于awk 截取
#根据:分割取第二个字段
cut -d: -f2 xxx
使用cut的-c参数也可以直接使用-n来截取前几个字符,n-截取从n开始后的字符,空格也是算一个字符的
cut -c3- 从第三个后面开始
shell三目运算符号
#shell三目运算符号
# [ ] 为简洁的判断写法
#下面这句话表示,如果上一个命令成功执行,那么执行echo success,如果失败那么echo failure
#各个部分都可以自定义,此处就是介绍shell三目运算符的形式
[ "$?" != "0" ] && echo "success" || echo "failure"
shuf
#随机取数,或者取一行几行文件内容
shuf -i1-10 -n1 -i指定范围 -n取多少
shell睡眠
#shell睡眠
sleep 1 默认单位为秒
sleep 1s 睡眠1秒
sleep 1m 睡眠1分
sleep 1h 睡眠1小时
#shell 接收输入
#-p 可以指定提示语 将输入赋予answer变量
read -p " 确定卸载吗?(y/n)" answer
#sudo管道接收密码
#必须是大写的S
echo pwd | sudo -S
#不换行输出
echo -n
# linux权限记忆
ugo rwx 421
#shell输出到终端的同时重定向到文件 tee命令
tail -f a.log | tee test
#用下面的命令直接将firefox强制杀死,重启firefox,会询问是否恢复session
#ps -ef | grep firefox | awk '{print $2}' | xargs kill -9
#关闭firefox异常退出的会话session恢复功能
在地址栏,输入about:config
双击browser.sessionstore.resume_from_crash并设置为false
#firefox地址栏address bar出现百度、新浪、爱奇艺 看着太难受了
解决办法:将设置-隐私安全-地址栏的热门网站关掉即可
#判断一个小文件中文字是否在一个大文件中包含
直接在grep 小文件内容 大文件 即直接在大文件中进行grep查找
#将进程方法哦后台运行(xxx.sh里面是具体的脚本内容)
nohup xxx.sh &
sort
#sort排序
#不知道你没有见到过排序后 10竟然比2小 如 1 10 11 2
#其实这种情况是因为字典序排列 字典序排序 会先比较第一位 如果小就放前面
#按照数字本来的大小进行排序 则需要
sort -n #按照数字大小进行排序,而不是字典序
#有时候文件名中包含除了数字之外的东西,如 1.1.md 1.10.md
#则除了要按照字典序排序 sort -n 之外还有指定按照哪个字段进行排序
sort -k 1 -k 2 或者 sort -k 1,2 #按照具体哪个字段进行排序 -k 可以有多个 类似于sql order by 多个
sort -t : #按照什么分割字段
#综上 完整按照数字大小排序