shell脚本学习入门



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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值