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 将标准输出重定向到标准错误


# 持续更新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值