shell个人总结

本文主要介绍了Shell的一些常用命令和技巧,包括状态码查询、tr、cut、三目运算符、shuf、sort、ls、替换换行符、参数个数、内置命令、免密码登录、处理文件名空格、管道、新工具、if语句中的字母含义、三剑客(sed、grep、awk)以及常见错误和注意事项。此外,还提到了在Mac上shell命令的差异,建议使用Python处理复杂逻辑,并给出了比较文件夹不同和处理隐藏文件的方法。
摘要由CSDN通过智能技术生成

$?

查看上个执行的命令的退出状态码,只能显示上一个

状态码的含义表示如下

    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 : #按照什么分割字段
#综上 完整按照数字大小排序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值