Linux Shell 脚本编程(3) | 您所在的位置:网站首页 › 简述shell编程的基本过程 › Linux Shell 脚本编程(3) |
shell 输入与输出
提纲:
echo
read
cat
管道
tee
文件重定向
标准输入输出和错误
合并标准输出和标准错误
exec和使用文件描述符
文件重定向
目标: 终端用户登录linux服务器,为每一个终端用户启动一个shell程序。
1. echo
echo命令可以显示文本行或变量,或者把字符串输入到文件。
命令格式: echo [option] string
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
2. read
read语句可以从键盘或文件的某一行文本中读入信息,并将其制复制给一个变量。 格式: read var1 var2 …. 若只指定了一个变量,那么read将会把所有的输入赋给该变量,直至遇上第一个文件结束符或者回车。如果给了多个变量,他们按照顺序分别赋予不同的变量。shell将用空格作为变量之间的分隔符。
#脚本文件 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
3. cat
是一个简单而通用的命令,可用它显示文件内容、创建文件、还可以用它来显示控制字符。 格式: cat [options] filename1 … filename2 …. -v 显示控制字符 eg: cat –v dos.txt #显示dos文件的^M 使用cat命令时注意,它不会在文件分页处停下来;它会一下显示完整个文件。 如果希望每次显示一页,可以使用more命令 或把cat命令的输出通过管道传递到另外一个具有分页功能的命令(more、less)中。 eg: cat longfile |more cat longfile | less less longfile man cat 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,若其不存在) 4. 管道可以通过管道把一个命令的输出传递给另外一个命令做输入。管道用竖线 | 表示 格式: 命令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字符排除掉 5. tee把结果输出到标准输出,另一个副本输出到相应文件(调试时相当有用) 格式: 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 6. 标准输入、输出及错误 当我们在shell中执行命令的时候,每个进程都和三个打开的文件(文件描述符)相联系,并使用文件描符来引用这些文件。由于文件描述符fd不容易记忆, shell同时也给出了相应的文件名。 输入文件—标准输入 0 ---fd0 输出文件—标准输出 1 ----fd1 错误输出文件—标准错误 2 ----fd2 系统中实际上有12个文件描述符,但是正如我们在上表中所看到的,0、1、2是标准输入、出和错误。可以任意使用文件描述符3到9。 7. 文件重定向 文件重定向:改变程序运行的输入来源和输出地点
———注意: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声明的变量都失效了。 2 对文件描述符进行操作时,也只有这个时,它不会覆盖你的当前的shell。 #!/bin/bash #file_desc # exec 3 |
CopyRight 2018-2019 实验室设备网 版权所有 |