一起学Shell之(二)输出以及其它


echo 与printf I/0重定向等
 
 
语   法:echo [-ne][字符串]或 echo [--help][--version]
补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。
参   数:-n 不要在最后自动换行
           -e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
–help 显示帮助
–version 显示版本信息
 
死记硬背不是个办法,我们也不可能记得这么多参数,最好的办法就是请求帮助,man echo echo -help再不行百度。echo的具体作用在于输入信息,如提示用户到哪里了,提示用户该输入什么信息了。这个比较适合加\a参数,响一下来让用户知道该做什么该作,但更多的脚本最好少一些交互吧。\n换行,我想输出信息也是为了美观吧。或者提示用户信息到哪了,要出错在之前或之后。
 
printfr wt
说明:甚本复制了C程序库里的printf()库程序的功能,所以基本可以通用。与echo不同的是它不提供换行操作。
 
%s 用于字符串的输出
如:
--------------------------------
[root@localhost test]# cat printf
printf "hello 123 '%s,%s'" Love 51cto
[root@localhost test]# ./printf
hello 123 'Love,51cto'[root@localhost test]#
------------------------------------
并没有提供换行符,所以输出的信息连在一起了。这个%s的作用我的理解是用作多个同种格式下文本的定义还不错,这样会省于很多代码,和省下很多心。
---------------------------------
[root@localhost test]# cat printf
i='%s,%s!'
printf "$i" ni hao zhongguo
printf "$i" ni hao cwtea
printf "$i" love you
[root@localhost test]# ./printf
ni,hao!zhongguo,!ni,hao!cwtea,!love,you![root@localhost test]#
---------------------------------------
 
基本的I/O重定向
 
概念:程序应该有数据的来源端和目地端,以及报告问题的地方,称之为标准输入,标准输出,标准错误输出、
 
输入输出可以是任何文件终端硬件等,而以Linux一切皆文件,那么就是任何文件喽。
 
例:
-------------------------
[root@localhost test]# cat
11234  #手工输入的
11234  #cat输出的
[root@localhost test]#
-------------------
 
重定向符号:
< > >>
< 的作用是调取后面的文件然后用<前进行操作。
例:
-----------------------------------
[root@localhost test]# cat ts
#! /bin/sh
hello 51CTO
[root@localhost test]# tr -d "hello" < ts
#! /bin/s
 51CTO
[root@localhost test]#
-----------------------------------------
 
> 的作用就是把前面的内容输出到后面的文件中,如果目的地不存在,那么创建,已存在那么替换掉原数据。
-------------------------------
[root@localhost test]# cat ts
#! /bin/sh
hello 51CTO
[root@localhost test]# cat ts >123
[root@localhost test]# ls
123  printf  ts
[root@localhost test]# cat 123
#! /bin/sh
hello 51CTO
[root@localhost test]#
-----------------------------------
 
>>是添加文件到末尾,这个对配置文件很有效啊。
如:
------------------------------------
[root@localhost test]# tr -d "hello" <ts >>123
[root@localhost test]# ls
123  printf  ts
[root@localhost test]# cat 123
#! /bin/sh
hello 51CTO
#! /bin/s
 51CTO
[root@localhost test]#
----------------------------------------
:这个过度多加了一行,先是取ts里面的值并执行tr -d "hello"并输出到123的末端。由于是一路操作下来的,那么123和ts文件就不cat了。tr命令,请tr -help或百度查。tr的作用,更改文件,特别是配置文件特别不错,注意的是在有管道时,我们应该体现数据效率,尽可能的把少的数据移交给后面的管道。
 
特珠文件:/dev/null与/dev/tty
/dev/null这个大家最常见,特别是任务计划中。
/dev/null 位桶,把数据写入此文件,系统将认为数据已完成写入操作,并把数据给丢掉。
/dev/tty:打开此文件,系统就重定向到另一个终端与程序相结合。
 
/dev/null 这个用的比较广,比如任务计划每五分钟执行一次程序,那么产生的信息太多,而我们又不需要,这时可以
 
直接给它写到位桶里面。
/dev/tty 这个个人认为在安全方面不错,当A要输入密码时可以切换到另一终端,让另一终端来输入密码然后确认后返
 
回。原Shell.
-----------------------------------
[root@localhost test]# cat tty
echo "Input Pass1:"  
stty -echo #关闭echo
read pass </dev/tty #接怍数据从/dev/tty新终端
echo pass2 "Input Enter"
read pass2 </dev/tty
stty echo
[root@localhost test]# ./tty
Input Pass1:
pass2 Input Enter
[root@localhost test]#
-----------------------------------
 
Shell每次登陆都要读取.profile文件,后面的版本好像是在根目录的.bash_profile
--------------------------
[root@localhost ~]# cat .bash_profile
# .bash_profile
 
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
 
# User specific environment and startup programs
 
PATH=$PATH:$HOME/bin   #
 
export PATH
unset USERNAME
[root@localhost ~]#
---------------------------
如果你要定义shell找你自己定义的目录的话,或者也可以在开头的第一行加上#!/你的目录话加
---------------------------
PATH=:/bin    先找这目录
PATH=/bin     中间找这目录
PATH=/bin: 最后找这个目录
--------------------------
所以位置的排例是以:号为基准。
 
简单的执行跟踪:
set -x 
set +x
这个作用蛮大的,还有一个test也蛮强的,但我喜欢set -x ,在执行程序每一行都会提示Shell进行的什么
 
操作,已经操作完的内容。
--------------------------------
[root@localhost test]# ./tty
++ echo 'Input Pass1:'
Input Pass1:
++ stty -echo
++ read pass
++ echo pass2 'Input Enter'
pass2 Input Enter
++ read pass2
++ stty echo
[root@localhost test]#
----------------------------------
 
国际化与本地化:这个太高尚了,所以没记任何笔记。

相关内容

    暂无相关文章