您的位置:首页 > 运维架构 > Shell

shell脚本学习入门

2016-03-16 14:41 375 查看

Shell是各大UNIX系统之间通用的功能,具有简单,可移植。开发容易等突出特点,本文列举出shell编程常见的操作,让初学者有个大概的Linux

 

1).简单输出

[gz_field@gim ~]$ type echo

echo is a shell builtin

[gz_field@gim ~]$ echo -e "the year is2013.\ntoday is 26"

the year is2013.

today is 26

 

[gz_field@gim ~]$ type printf

printf is a shell builtin

[gz_field@gim ~]$ printf "the year is2013.\ntoday is26\n"

the year is2013.

today is26

 

2).一个简易的脚本

[gz_field@gim ~]$ who

root    
tty1         2012-04-18 10:09

gz_field pts/1       
2016-02-25 16:36 (172.23.33.204)

[gz_field@gim ~]$ who | wc -l #计算用户个数

2

[gz_field@gim ~]$ cat > test

who | wc -l

[gz_field@gim~]$ chmod +x test

[gz_field@gim ~]$ ./test

2

 

3).重定向与管道

tr -d '\r' < dos-file.txt > UNIX-file.txt

               
#先用tr讲文件里的回车删除,再将转换完成的数据输出到目的文件

for f in dos-file.txt

do

       
tr -d '\r' < $f >> big-UNIX-file.txt

done

               
#若文件不存在则创建,存在则追加输出

               

tr -d '\r' < dos-file.txt | sort > UNIX-file.txt

#先用tr讲文件里的回车删除,排序之后,再将转换完成的数据输出到目的文件

[gz_field@gim ~]$ echo $PATH

/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/jdk/bin:/home/gz_field/bin

 

4).准备自己的bin存放脚本

cd
                                  #切换到home目录

mkdir bin
                       #建立个人bin目录

mv nusers bin
                #将个人脚本置入该目录

PATH=$PATH:HOME/bin
#将个人的bin目录附加到PATH

nusers                             
#查看shell是否找到并执行

 

修改永久有效:在.profile文件中把bin目录加入$PATH


vi /etc/profile
                #编辑profile文件

PATH=$PATH:HOME/bin        
#加入PATH路径

source /etc/profile 
      #使修改生效

 

5).访问shell脚本的参数,查看用户使用的终端

[gz_field@gim ~]$ who

root    
tty1         2012-04-18 10:09

gz_jonesyan pts/1       
2016-03-01 08:19 (172.23.33.209)

gz_jonesyan pts/2       
2016-03-01 08:19 (172.23.33.209)

gz_field pts/3       
2016-03-01 16:27 (172.23.33.204)

[gz_field@gim ~]$ who | grep gz_field

gz_field pts/3       
2016-03-01 16:27 (172.23.33.204)

 

[gz_field@gim ~]$ cat > text  
#建立新文件

#!/bin/sh

#finduser
       ---查看第一个参数所指定的用户是否登录

who | grep $1        
#Ctrl+D结束

[gz_field@gim ~]$ chmod +x text         
#添加执行权限

[gz_field@gim ~]$ ./text gz_jonesyan

gz_jonesyan pts/1       
2016-03-01 08:19 (172.23.33.209)

gz_jonesyan pts/2       
2016-03-01 08:19 (172.23.33.209)

[gz_field@gim ~]$ ./text gz_field          
#测试

gz_field pts/3       
2016-03-01 16:27 (172.23.33.204)

[gz_field@gim ~]$ mv text $HOME/bin       
#将该文件存入自己的bin目录

 

6).简单的执行跟踪

[gz_field@gim ~]$ cat > trace.sh    
#建立脚本

#!/bin/bash                    

set -x
                     #打开跟踪功能
,不会被跟踪,该命令执行后才开启跟踪功能

echo 1st echo
                        #测试

who | grep gz_field

set +x                      
#关闭跟踪功能,被跟踪,该命令执行后才关闭跟踪功能

echo 2nd echo

who | grep gz_jonesyan

[gz_field@gim ~]$ chmod +x trace.sh

[gz_field@gim ~]$ ./trace.sh

+ echo 1st echo

1st echo

+ who

+ grep gz_field

gz_field pts/3       
2016-03-01 17:22 (172.23.33.204)

+ set +x

2nd echo

gz_jonesyan pts/1       
2016-03-01 08:19 (172.23.33.209)

gz_jonesyan pts/2       
2016-03-01 08:19 (172.23.33.209)

 

7).特殊文件:/dev/null与/dev/tty

/dev/null 


在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF。在程序员行话,尤其是Unix行话中,/dev/null
被称为位桶(bit bucket)或者黑洞(black hole)。空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。这些操作通常由重定向完成。

/dev/zero 


在类UNIX
操作系统中, /dev/zero
是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是产生一个特定大小的空白文件。BSD就是通过mmap把/dev/zero映射到虚地址空间实现共享内存的。可以使用mmap将/dev/zero映射到一个虚拟的内存空间,这个操作的效果等同于使用一段匿名的内存(没有和任何文件相关)。

/dev/tty:

设备包括虚拟控制台,串口以及伪终端设备。
/dev/tty代表当前tty设备[tty命令],\在当前的终端中输入
echo “hello” > /dev/tty ,都会直接显示在当前的终端中。

控制终端(/dev/tty):

如果当前进程有控制终端(Controlling Terminal)的话,那么/dev/tty就是当前进程的控制终端的设备特殊文件。可以使用命令”ps
–ax”来查看进程与哪个控制终端相连。对于你登录的shell,/dev/tty就是你使用的终端,设备号是(5,0)。使用命令”tty”可以查看它
具体对应哪个实际终端设备。/dev/tty有些类似于到实际所使用终端设备的一个联接。

/dev/console:

即控制台,是与操作系统交互的设备,系统将一些信息直接输出到控制台上。

目前只有在单用户模式下,才允许用户登录控制台

/dev/pty*:

即伪终端,所谓伪终端是逻辑上的终端设备,多用于模拟终端程序。例如,我们在X Window下打开的终端,以及我们在Windows使用telnet
或ssh等方式登录Linux主机,此时均在使用pty设备(准确的说应该pty从设备)。

/dev/tty0:

代表当前虚拟控制台,而/dev/tty1等代表第一个虚拟控制台,例如当使用ALT+F2进行切换时,系统的虚拟控制台为/dev/tty2
,当前的控制台则指向/dev/tty2

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: