欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell学习笔记

程序员文章站 2022-05-24 07:50:56
...

1,I/O重定向
> 输出到文件,如果不存在该文件会新建。如果存在,则覆盖内容。
>> 输出到文件,添加到文件的结尾。不会导致已存在文件内容被覆盖。
< 输入重定向,来源于文件


sort 命令
sort source_file sorted_file  等同于如下写法:sort>sorted_file<source_file
该命令的效果是,将source_file的内容排完序后,输出到sorted_file

要使用排序的文本替换原始文件,请输入:
sort -o vegetables vegetables此命令序列将排序输出存入 vegetables 文件( -o vegetables)。

转换文件的内容大小写
tr "[a-z]" "[A-Z]" source_file dest_file


对管道的理解:
管道是不利用临时文件,将一个程序的输出与另一个程序的输入连接起来的方法。
管道的定义:
"A pipe is nothing but a temporary storage place where the output of one command is stored and then
passed as the input for second command. Pipes are used to run more than two commands ( Multiple
commands) from same command line."

more  输出一屏的内容

查看一个文件的第20行-30行的内容输出到目标文件
$ tail +20 < hotel.txt | head -n30 >hlist
以上的代码有点不理解?


"A process is program (command given by user) to perform specific Job. In Linux when you star
process, it gives a number to process (called PID or process-id), PID starts from 0 to 65535."

 

bc 和 Linux shell 对于true/false 使用不同的值:
bc: true/false : 1/0
linux shell:true/false : 0/Non zero value

使用操作符时,两边的操作数需要与操作符有空格间隔。
例如:test 1 = 1

逻辑操作符:
!expression         逻辑非
expression1 -a expression2    与操作
expression2 -o expression2    或操作

for in
do
done

while []
do
done

case  in
xxx) command;;
xxx) command;;
esac


shell 脚本的调试
sh -v shell_script
sh -x shell_script

ls > /dev/null
/dev/null 是特殊的linux文件,程序可以将任何不想要的输出,发送到该文件


局部和全局shell变量
一般的变量仅对当前shell可见,如果切换新的shell,则无法访问老的shell变量。
如果希望该变量全局可见,可以用export命令导出该变量。

shell里&&以及||---短路运算符
示例:$ rm myf && echo "File is removed successfully" || echo "File is not removed"

I/O重定向
cat>dest.txt
10
-20
11
2
^D
将这四个数字输入到dest.txt中,按ctrl+D保存输入。
sort<dest.txt
-20
2
10
11

linux的标准输入输入:stdin,stdout,stderr
对应的文件描述符分别为:0,1,2
rm unkown.txt 2>output.txt
该重定向,会将stderr重定向输出到output.txt


Function(函数)
Function is series of instruction/commands.


trap 命令用于在收到某种信号(中断,kill,quit等)时,采取相应的操作。
比如,人为中断程序时,shell 脚本可以利用trap命令,在完全退出时,做一些清理临时文件的操作。

 

shift命令
将位置参数左移。可以在后面制定左移的数量
$1 = -f $2 = foo $3 = bar
执行shift命令后:
$1=foo, $2=bar, $3=
该命令在解析命令行参数时有用,不过一般针对是比较简单的命令行参数场景。

 

awk
awk '{print $0}' source_file
$0是特殊的wak变量,打印source_file的一整行记录。
awk -f source_shell  -f选项是让awk,从给定的文件中读取命令。

awk中的预定义的变量
NR --number of input record
NF --number of fields in input record

printf "%s is my sweet home",ENVIRON["HOME"]

awk脚本文件中,支持用{}将代码块包含起来。
在awk中,system()函数用来执行给定的系统命令,比如cp,rm等
示例:system("rm foo")
命令的输出对于程序而言是无法获取的,不过system()函数会返回exit code,从而可以判断命令是否执行OK。
if(system(cmd) != 0)
 printf "not ok\n"
else
 printf "ok\n"