echo
read
cat
管道
tee
文件重定向
标准输入输出和错误
合并标准输出和标准错误
exec和使用文件描述符
文件重定向
echo [option] string
#选项说明:
-e 解析转义字符
echo –e “ab\ncd” echo “ab\ncd”
ab ab\ncd
cd
-n 回车不换行,linux系统默认回车换行 eg: echo –n “abc” ; echo “abc”
-转义字符 ( \c(回车不换行) \f(禁止)\t(回车换行) \n(回车换行) )
#实验脚本文件 js.sh
#!/bin/bash
#echo
echo -e "demo01.... \n\n\n"
echo "ok"
#echo 空,后面没有任何东西,将要有一个回车换行
echo
echo "demo02......\n\n\n"
echo "demo03 line" >mylog.txt
#执行结果
demo01....
ok
空,后面没有任何东西,将要有一个回车换行
demo02......\n\n\n
#脚本文件 shll01.sh
#!/bin/bash
#readme
#注意回车不换行的用法
echo -n "First Name:"
read firstname
echo -n "Last Name:"
read lastname lastname2
echo -e "FirstName: ${firstname}\n"
echo -e "LastName: ${lastname}\n"
echo -e "LastName2: ${lastname2}\n"
#执行结果:
jianliu@ubuntu:~$ ./shell01.sh
First Name:kang
Last Name:jian bing
FirstName: kang
LastName: jian
LastName2: bing
是一个简单而通用的命令,可用它显示文件内容、创建文件、还可以用它来显示控制字符。
格式: cat [options] filename1 … filename2 ….
-v 显示控制字符
eg: cat –v dos.txt #显示dos文件的^M
eg: cat longfile |more
cat longfile | less
less longfile
jianliu@ubuntu:~$man cat
CAT(1) User Commands CAT(1)
NAME
cat - concatenate files and print on the standard output
SYNOPSIS
cat [OPTION]... [FILE]...
DESCRIPTION
Concatenate FILE(s), or standard input, to standard output.
-A, --show-all
equivalent to -vET
-b, --number-nonblank
number nonempty output lines, overrides -n
-e equivalent to -vE
-E, --show-ends
display $ at end of each line
-n, --number
Manual page cat(1) line 1 (press h for help or q to qui
cat myfile
cat myfile1 myfile2 myfile3 #显示三个文件
cat myfile1 myfile2 > myfile12 #同时将文件2的内容拷贝(重定向)到文件12中(创建新的文件12,若其不存在)
可以通过管道把一个命令的输出传递给另外一个命令做输入。管道用竖线 | 表示
格式: 命令1 | 命令2
实例
jianliu@ubuntu:~$ ls -l | grep "app2"
-rwxrwxr-x 1 jianliu jianliu 8501 Oct 6 19:26 app2
jianliu@ubuntu:~$ cat myfile | more
jianliu@ubuntu:~$ df –k | awk '{print $1}' | grep –v "Filesystem"
/dev/sda1 none udev tmpfs
none none none
#df –k 看磁盘空间 查找第一列 去除filesystem字符排除掉
把结果输出到标准输出,另一个副本输出到相应文件(调试时相当有用)
格式:
tee –a file
-a: 表示追加,在file后面追加内容
不加-a 表示覆盖,覆盖之前的文件,重写。
eg:
jianliu@ubuntu:~$ who | tee -a who.out
jianliu :0 2017-10-06 01:36 (:0)
jianliu pts/0 2017-10-06 20:04 (:0.0)
#输出到终端上,并且将结果写入who.out文件中。
df –k | awk '{print $1}' | grep –v "Filesystem" | tee partation.txt
输入文件—标准输入 0 ---fd0
输出文件—标准输出 1 ----fd1
错误输出文件—标准错误 2 ----fd2
!注意!!
——— 1>中 1和>中间不能有空格!!!———————–
jianliu@ubuntu:~$ cat num1.txt
25
2
10
12
23
#对num1.txt中元素按照数值大小规则进行升序排序。
jianliu@ubuntu:~$ cat num1.txt | sort -g
2
10
12
23
25
#将排序结果存于num2.txt中
jianliu@ubuntu:~$ cat num1.txt | sort -g > num2.txt
#与上面的结果一样,等价命令。
jianliu@ubuntu:~$ cat num1.txt | sort -g 1> num2.txt
#!注意!! 1>中 1和>中间不能有空格-----------------------
#当前路径信息追加到path.out中
pwd >> path.out
#nullfile.txt 如果想创建一个长度为0的空文件,可以用'filename'
#将num1.txt的内容输入到sort进行排序,排序后的结果输出到终端
#!!!默认情况下,sort按照ASCII码大小进行排序。
jianliu@ubuntu:~$ sort 10
12
2
23
25
#从num1.txt中读内容,进行排序,排序结果输出到num2.txt中。
jianliu@ubuntu:~$ sort -g < num1.txt > num2.txt
eg:$ grep "trident" missiles 2> /dev/null
#在这个例子中,grep命令在文件missiles 中搜索trident字符串
eg:$ cat account_qtr.doc account_end.doc 1> accounts.out 2> accounts.err
eg: grep "standard" standard.txt > grep.out 2> &1
#在上面的例子中,我们将 cleanup脚本的输出重定向到cleanup .out文件中,而且其错误也重定向到相同的文件中。
———注意:shell是从左至右分析相应的命令!!!!!!
/home/wbm/myshell
[wbm@wmblinux64 myshell]$ cat file1 file2 file3 > err.out 2< &1
[wbm@wmblinux64 myshell]$ cat err.out
111
1111
111111
222
22222
2222222
cat: file3: 没有那个文件或目录
[wbm@wmblinux64 myshell]$
【6】—-exec 与文件描述符在一起的情况
exec命令用于调用并执行指令的命令。exec命令通常用在shell脚本程序中,可以调用其他的命令。如果在当前终端中使用命令,则当指定的命令执行完毕后会立即退出终端。
语法: exec(选项)(参数)
1、 exec命令可以用来代替当前shell;
换句话说,并没有启动子shell,使用这一命令时,任何现有环境都将被清除,并重新启动一个shell。
首先使用echo命令将文本“Linux C++”进行输出,输入如下命令:
echo Linux C++ #输出指定信息
执行上面的指令后,输出如下信息:
Linux C++ #输出信息
然后再使用exec命令调用echo命令输出同样的信息,并且对输出的信息进行对比,输入指令如下所示:
exec -c echo Linux C++ #调用命令
执行以上命令后,其输出信息如下:
Linux C++ #使用指定指令输出信息
通过比较两者执行后的结果来看,所实现的功能是相同的,即使用exec命令调用echo命令成功。
——- exec command command通常是一个shell脚本。
——-Eg:测试执行完该命令后,需要重新登录shell,然后export声明的变量都失效了。
#!/bin/bash
#file_desc
#
exec 3<&0 0read line1
read line2
exec 0<&3
echo $line1
echo $line2