shell命令使用小抄


前言

记录shell的常用命令


一、常用命令

1. 指定shell使用的解释器

写shell脚本时,首先要指定什么样的解释器

#! /bin/bash

2. shell 变量

定义变量时变量名不能加美元符号 $
使用定义过的变量时,只需要在变量名之前加美元符号 $ 即可

notice:使用变量时,变量名外面的花括号是可选的,加花括号是为了 帮助解释器识别变量的边界,对于变量的使用,最好都加上花括号
比如:

name='alice'
echo ${name}

for skill in ada coffe action java;do
	echo "i am good at ${skill}scipt"
done

特殊变量:

$? 代表返回上一行运行的状态值
$* 代表命令行向脚本输入的所有参数,但是看成一个词
$# 代表命令行向脚本输入的参数个数
notice:shell中任何变量等号左右 不能有空格,可能和熟悉的其他编程语言不一样

3. shell注释

单行注释
# 号进行注释

#这是一段简单的注释

多行注释
:<<!
注释内容块

:<<!
注释内容块
!

4. shell字符串
单引号字符串限制:
单引号的任何字符串都会 原样输出 ,单引号字符串里面的变量是无效的
单引号字符串中不能出现单引号(对单引号 使用转义符 也不行)

双引号内 可以有变量
双引号中 可以出现转义字符

拼接字符串
将字符串直接写在一起即可

name="alice"
greeting="hello",${name}
echo $greeting

获取字符串长度
字符串前加井号“#”获取

num="abcd"
echo ${#num}
#输出结果为
4

提取子字符串
${string: start :length}
其中,string 是要截取的字符串,start 是起始位置(从左边开始,从 0 开始计数),length 是要截取的长度(省略的话表示直到字符串的末尾)。

query="google is a great company"
echo ${query:1:4}
#输出结果为
oogl

5. shell判断

if [ command ];then
符合该条件执行的语句
elif [ command ];then
符合该条件执行的语句
else
符合该条件执行的语句
fi

判断文件是否为空
if[ ! -f “$local_save” ]:
-d 判断路径
-x 判断是否可执行
-n 判断变量是否有值

整数比较 -eq(相等),-ne(不等),-ge(大于等于),-le(小于等于),-lt(小于),-gt(大于)

字符串比较 =,==,!=
双等号 ==的功能在 [[]] 和 [] 中的行为是不同的,如下:

  1. [[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true
  2. [[ $a == “z*” ]] # 如果$a等于z*(字符匹配),那么结果为true
  3. [ $a == z* ] # File globbing 和word splitting将会发生
  4. [ “$a” == “z*” ] # 如果$a等于z*(字符匹配),那么结果为true

notice:if后的中括号里面前后要有 空格,括号结束要有分号“;”,对于路径需要有引号

if [ "$weight" -ge "0" ]&&[ "$weight" -lt "100" ];then
        echo "thin"
elif [ "$weight" -ge "100" ]&&[ "$weight" -lt "180" ];then
        echo "nice"
elif [ "$weight" -ge "180" ]&&[ "$weight" -lt "300" ];then
        echo "fat"
else
     echo "input wrong"
fi

6. grep用法
-n 显示符合样式的那行之前,顺便输出行号形式为“行号:内容”
-c 计算找到‘搜寻字符串的’次数
-i 忽略大小写的不同,所以大小写视为相同
-v 显示不匹配样式的所有行,相当于反向选择
-o 只输出文件中匹配到的部分
-w 精确匹配,只匹配输入的字符串
-m 返回匹配的前几个,为1则匹配第一个
-P,–perl-regexp 使用perl正则表达式引擎解析pattern,因此支持perl正则表达式。

notice:正则匹配时,\w为单个字符,\b为字符边界

cat test.txt | grep -o 'hello'

7. su用法
用户切换用户
su -admin 用于切换用户并变换 环境变量
su admin 只用于切换用户

su -admin

8. cut用法
cut用于分割字符串
cut -d:指定字段的分隔符,默认分割字段分隔符为“TAB”
cut -f:显示指定字段的内容
cut -c:仅显示行中指定范围的字符(以字符为单温)
cut 之后选中第一部分 -f1

cat test.txt | cut -d "*"

9. tr用法
tr “set1” "set2"用于删除文件中的控制字符,或者替换字符
-d 删除set1中的所有字符,不转换
-s 压缩set1中的重复字符
-t 将set1用set2替换,作为tr的缺省值

#用 | 替换 \n
tr "\n" "|"

11. sed用法
sed是一种流编辑器,它一次处理一行内容,主要用来替换和删除操作,‘/s’为替换

#将文件中全部的b都换成a
cat test.txt | sed '/s/a/b' g

12. wc用法
利用wc指令可以计算文件的byte数,字数或者行数
-c 显示byte数
-l 显示行数(常用
-w 显示字数

cat test.txt|wc -l
cat test.txt|wc -c
cat test.txt|wc -w

12. expr用法
expr命令是一个手工命令行计数器
一般用于整数,也可用于字符串

#执行任务
echo `expr 7 + 8`
echo `expr 4 / 2`
echo `expr 10 \* 5`
echo `expr 5 - 3`

13. alias用法
基本的alias是重命名,可以设置快速命令
bash中alias加参数 alias ttt=‘test() {echo $1;}; test’

notice:如果想让快捷方式长期使用,则将其添加至环境变量。编辑完成后一定要source ~/.bashrc才会生效

#执行任务
alias wl="wc -l"
#可添加参数的alias
alias ttt='test() {echo $1;}; test'

14. 退出返回值
程序退出状态为 0 表示成功
不为 0 表示 不成功
exit 0 表示脚本成功
exit 1 可以表示脚本运行不成功

#执行任务
sh test.sh
if [ $? -eq 0];then
	exit 0
else
	exit 1
fi

15. nohup用法
不挂断运行命令
加入&则为后台运行
jobs -l查看后台进程,在当前终端里面可以看。不在当前终端里面无法用此命令看。不在当前终端的时候使用ps -aux|grep test.sh
kill -9 pid,强制结束任务

nohup sh test.sh > test.log 2>&1 &

ps -aux|grep test.sh
kill -9 344589(344589为PID,通过上面命令可以查询到)

16. head和tail
head获取文本前几行, 默认10行
tail获取文件后几行
tail -f 实时输出最新写入结果,可以实时看日志

head -3 test.txt
#实时输出最新写入结果
tail -f test.txt

16. export用法
设置或显示环境变量
在登陆操作中可以对环境变量进行修改,添加操作

17. awk用法
awk是一种强大的文本分析工具,类似于脚本编程语言
awk -F 指定分隔符,多个用方括号括起来

变量NF表示当前行分隔后有多少个字段,因此$NF就代表最后一个字段
$(NF-1)代表倒数第二个字段
变量NR表示当前处理的是第几行

二、常见问题

1.换行符
在unix系统里,每行结尾只有“<换行>”,即“\n” 。但是在windows的系统里面,每行结尾是“<换行><回车>”,即“\n\r”。一个直接的后果是,unix系统下的文件在windows里文本打开的话,所有的行会显示出只有一行。而windows里的文件在unix下打开的话,在每行的结尾可能会多出一个^M符号,注意!!

2.2>&1含义
shell中的文件描述符有三个
0 表示标准输入
1 表示标准输出
2 表示标准错误
所以 2>&1 就是讲标准错误重定向到标准输出
1 >&2 将标准输出重定向到标准错误


# 持续更新
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Leetcode算法小抄是一份权威的算法手册,包含了Leetcode上常见的算法题目的解法和详细讲解。这个小抄对于想要提升自己算法能力的程序员来说非常有用。该小抄包括以下内容: 1.基础数据结构:包括数组、链表、栈、队列、树、哈希表等。 2.算法基础:包括排序算法、搜索算法、贪心算法、动态规划等。 3.高级算法:包括图论、字符串匹配、线性代数、计算几何等。 每个算法题目都附有详细的解析和代码实现,方便程序员进行学习和练习。此外,该小抄还提供了优秀的算法实现其他程序员的思路和解答,这对于新手来说尤为重要。 总之,Leetcode算法小抄是一份非常实用的算法手册,如果你想成为一名出色的程序员,学习和掌握其中的内容必不可少。 ### 回答2: LeetCode算法小抄是一份非常实用的算法指南,它包含了大量的算法问题和解答,而且所有的算法问题都是以LeetCode网站上的题目为蓝本的。这个小抄主要面向准备参加Google、Facebook、 Apple等知名科技公司的笔试或者面试的程序员,也适用于想要提高自己算法能力的人。这份小抄的编制者是Steven Halim和Felix Halim,也就是ACM竞赛的著名选手和教练。他们将自己多年的ACM竞赛经验倾囊相授,帮助大家提高算法能力。小抄中包含了高频出现的数据结构和算法,如树、图、排序、数组、动态规划等,每个算法都有详细的解释和代码实现。此外,小抄还包含了一些实用技巧,如测试用例设计、代码调试、复杂度分析等。总之,LeetCode算法小抄是一份非常实用、全面的算法指南,如果你想要提高自己的算法能力,相信它一定能为你带来帮助。 ### 回答3: LeetCode算法小抄是一个常用的算法学习工具,它主要是为了帮助程序员更加高效地学习和掌握LeetCode算法。LeetCode算法小抄中收录了大量经典的算法题目,并提供了详细的题解和代码示例,涵盖了各种数据结构、算法和编程技术。 LeetCode算法小抄的优点在于它的简便性和针对性。其内容结构清晰,难度逐渐增加,让读者能够逐步学习并掌握更加复杂的数据结构和算法。同时,小抄中提供了大量的代码示例和优化方法,可以帮助读者更加深入地理解和掌握算法。 另外,LeetCode算法小抄还提供了各种算法题目的分类、标签和解法推荐,让读者能够更加容易地找到自己需要的题目和解法。同时,小抄中还提供了一些常见的面试题目和解题思路,可以帮助读者更好地应对工作中和面试中的挑战。 总之,LeetCode算法小抄是一本非常实用的算法学习工具,它可以帮助程序员更加高效地学习和掌握算法知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值