【Linux】shell

cat file.txt 查看文件内容
cat file1.txt file2.txt > newfile.txt 合并文件内容(覆盖原内容)
cat dev/null > file.txt 文件内容清空,文件还在

非交互式编辑文件 有$用\转义
EOF 结束标记,必须成对出现,结尾EOF必须顶格

# 清空文件 然后输入内容
# 不清空直接追加 cat >>
cat > file.txt << EOF
> hello
> world
> EOF

echo 将文本显示在linux命令行上,或重定向符写入指定文件
echo -e ‘hello\world’ 有符号用-e

> 重定向符,清除文件所有内容,将内容追加到文件末
echo 'hello' > file.txt
>> 追加重定向,追加内容到文件最后一行
echo 'hello' >> file.txt

grep 过滤,从文本文件或管道数据流中筛选

grep option pattern file
#    参数    模式    文件
option
-v 显示不匹配的行,结果反转
-n 显示匹配的行及行号
-i 不区分大小写(单字符)
-c 统计匹配的行数(不是次数)
-o 只输出匹配的内容
-E 能识别符号
grep fcw name.txt 从文件中找含有fcw的行,需要显示行号 -n
grep -vn fcw name.txt 找不含有fcw的行,显示行及行号
grep -i Fcw name.txt 也能找fcw,不区分大小写

grep -E “fcw|csy” name.txt 找包含fcw或csy的行,-E能识别“|'''
. 任意字符,* 任意字
'''
grep “.*a.*” name.txt 包含a的
  • sed Strean Editor(字符流编辑器)
sed options [sed内置命令字符] [文件]
options
-n 取消默认sed输出,常与p一起用
-i 直接修改文件内容,而不是输出到终端。否则sed只修改内存中的数据。
-e 允许多次编辑
sed内置符
a append,在指定行后追加一行或多行文本
i insert,在指定行前追加一行或多行文本
d delete,
p print,打印匹配行内容,常与-n一起用
s/待替换内容/目标内容/g 目标内容替换待替换内容,g全局替换

sed -n ‘p’ file.txt 输出全部内容
sed -n ‘2p’ file.txt a 输出第2行
sed -n ‘2,4p’ file.txt 输出第2行到第4行

类似grep
sed -n ‘/fcw/p’ name.txt 输出含有fcw的行 “查找字符串/

sed ‘/fcw/d’ name.txt 内存中删除,不修改文件
sed -i ‘2,4d’ file.txt 删除文件中2-4行

-e 多项编辑,csy替换fcw,456替换123
sed ‘s#fcw#csy#g’ -e ‘s#123#456#g’ file.txt

sed -i ‘2a hello \n world’ file.txt 第2行后追加2行文本
sed -i ‘2i hello’ file.txt 第2行前插入文本,即在第2行位置插入文本

ifconfig en0

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=6463<RXCSUM,TXCSUM,TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
	ether 08:f8:bc:6a:bd:fc 
	inet6 fe80::57:5eb5:a9d2:6668%en0 prefixlen 64 secured scopeid 0x6 
	inet 172.24.180.224 netmask 0xfffffc00 broadcast 172.24.183.255
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active
筛选出ip
^ 匹配字符串开头
$ 匹配字符串结尾
.* 任意内容

通过两次管道
第1次过滤 筛选第5行,将inet及前面所有字符串筛掉;
第2次过滤 将netm及后面所有字符串筛掉
ifconfig en0 | sed -n '5s/^.*inet//gp' | sed -n 's/netm.*$//gp'

一次管道
-e 允许多次编辑 两次都编辑第5行,最后p输出
ifconfig en0 | sed -ne '5s/^.*inet//g' -ne '5s/netm.*$//gp'


\1 第1个括号内容,\2第2个括号内容
-r 支持正则表达式中的() ()中的内容保留
sed -nr 's#(hello) (world)#\1\2#gp' 

\1饮用括号中的内容,再替换前面所有内容
ifconfig en0 | sed -nr '5s#^.*inet (.*) netm.*$#\1#gp'

172.24.180.224

awk ‘NR>1&&NR<5’ file.txt NR表示行,读取2到4行
amk ‘NR2,NR3’ file.txt 读取第2,3行
awk ‘/root/’ file.txt 字符串root所在的行

shell变量 定义

等号两边不能有空格,否则识别为命令

a=5 
name="zhang san"
echo $a  输出
echo 'a=$a'

输出变量时,用`{变量}`区别变量和其他字符
echo ${a}_123  >>> 5_123
echo \${1..10} >>> $1 $2 $3 $4 $5 $6 $7 $8 $9 $10

unset a 消除变量
a=1.1.1-$a
b='2.2.2-$a'
c="3.3.3=$a"

# 一开始没定义a,$a没有输出
echo $a  >>> 1.1.1-
# 单引号输出引号里原本的内容,不理会$符
echo $b  >>> 2.2.2-$a
# 双引号会解析引号里的变量和命令,输出a的值
echo $c  >>> 3.3.3-1.1.1-

ps -f 查看和当前终端相关进程
bash 生成子shell
父shell中建立的变量不能在子shell中使用,子进程的也不能在父进程的用

source hello.sh
在当前shell中运行,

./hello.sh 执行若提示没有执行权限,chmod +x 。。。
bash hello.sh
以上俩开启子shell运行

shell变量类型

  1. 环境变量(全局变量)
    可以在当前shell和子shell中使用

export FLAG=8 环境变量名采用大写
退出会销毁,要保存的话需要保存在文件中

  • 用户home目录 bash_profile或bashrc文件中
  • 全局配置/etc/bashrc或/etc/profile文件中 所有用户都生效

env 查看环境变量
set 查看当前shell中所有变量

echo $HOME

命令结果赋值给变量

a=$(pwd)
echo $a >>> /Users/fcw

特殊变量

$0 当前执行的shell脚本的文件名
$1 $2 … $9 ${10} ${11} 当前执行的shell脚本的第n个参数,大于9用{}括起来
$# 获取脚本传入参数的个数
$? 上一个命令执行是否成功,echo $? 反回0成功 1失败

$* 和 $@ 获取所有参数,循环的时候挨个获取
“$*” 获取所有参数,并将其视为一个参数 “$1 $2 $3…”
“$@” 获取所有参数,将其视为不同的对字符串 “$1” “$2” “$3”,循环时挨个读取

bash /opt/server/a.sh 带路径执行
dirname /opt/server/a.sh >>> /opt/server 脚本路径
basename /opt/server/a.sh >>> a.sh 脚本名称

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值