最近年关公司任务不多,所以抽时间学习一下shell。
day1:
cat 1.txt | tr '0' '\n' 把1.txt中的0替换成\n
var=value:赋值操作 var = value:相等操作
变量都会以字符串的形式存储
环境变量:为在当前进程定义,而从父进程继承的,命令:export
bc:很有用的变量运算函数
0:stdin标准输入
1:stdout标准输出
2:stderr标准错误
重定向:
“xxx”>file(会把file中的内容先清空再写入xxxx)
“xxx”>>file(会在file中的内容后追加xxxx)
其中> == 1> >> == 1>>
重定向之后输出写入了file,所以没有东西可以通过管道传给下面的命令;
而tee在重定向的同时保存一个stdin可以传给下面的命令
tee(覆盖重定向) tee -a(追加)
command | tee file1 file2...
cat <<EOF>1.txt
abc
xyz
EOF
把文本段重定向到1.txt 其中的EOF可以换成任何在文本段中没有出现的字符串
注释整段脚本代码:
:<<COMMENTBLOCK
SHELLSCRIPT
COMMENTBLOCK
其中的:表示空语句
别名:alias
echo 'alias cmd="cmd seq" >> ~.bashrc' (别名只在当前shell环境中有效,关闭了终端就无效了,而每次打开终端的时候都会去执行.bashrc 所以把命令放在这里面就能保证每次打开终端都能使用该别名)
day2:
$# 传给脚本的参数个数
$0脚本本身的名称
$1传给shell脚本的第一个参参数
$2传给shell脚本的第二个参参数
$@传给shell脚本的所有参数列表
存储命令的输出:
1.子shell 格式:(cmd) 产生独立的进程,不影响当前的shell
cmd_out=$(ls|cat)
2.反引用:
cmd_out=`ls|cat` (反引号,位于键盘的~键上)
可以将子shell和反引用的结果放在双引号中来保留空格和换行符。
test命令等同与[ ]
netstat -anp 显示系统端口使用情况
lsof -i :端口 显示占用该端口的进程情况
day3:
录制与回放终端(很方便的用于教学 )
开始录制:
script -t 2>timing.log -a output.session
cmd
exit
回放录制:
scriptreplay timing.log output.session
b 块(512字节)
c 字节
w 字(2字节)
find 的-exec选项允许对找到的文件执行命令操作;
找到当前目录下的root用户的文件改成所有者为guozheng
find . -type f -user root -exec chown guozheng {} /;
xargs(用于给只能接受参数的命令提供参数)
cat rm |xargs -d ' ' rm -rf
tr(只能接受stdin不能接受参数输入):
tr [option] set1 set2
执行算数运算:
$[operation]:$[1+2+3]=6
sort -k n.m,p.q file
根据第n列的第m个字符到p列的第q个字符排序
uniq只能对排过序的输入去除重复的行,所以常与sort结合使用
sort file | uniq