1. 简介
shell(壳)是linux系统中用于将用户执行的命令解析成计算机能够执行的代码,然后交给内核由内核进行执行。通过/etc/shells文件中可以查看该linux系统所支持的shell种类。
shell脚本就是将平时写的一些命令按一定顺序保存到文件中,然后在赋予该文件执行权限就是一个shell脚本。
2. shell脚本的格式
[root@linux-03 ~]# vi shell.sh //使用vi编辑器进行编写shell脚本
#!/bin/bash //指定所指定的那种shell
#this is a test shell scripts //对该脚本的说明
x=1
echo $x //为该脚本的内容
3. shell脚本的有以下几种执行方式
1) [root@linux-03 ~]# sh shell.sh
1
2) [root@linux-03 ~]# . shell.sh
1
3) [root@linux-03 ~]# source shell.sh
1
4) [root@linux-03 ~]# ./shell.sh
-bash: ./shell.sh: 权限不够
[root@linux-03 ~]# chmod a+x ./shell.sh
[root@linux-03 ~]# ./shell.sh //直接执行需要给该文件授予执行权限
1
4. linux在处理数据时有下面几种交互设备文件
标准输入(STDIN) 文件设备编号为 0
标准输出(STDOUT) 文件设备编号为 1
标准错误(STDERR) 文件编号为 2
5. 重定向
重定向:如原本将标准输出的数据显示到屏幕,但是通过重定向“>”符号将标准数据的文件传送到指定的文件中。
[root@linux-03 ~]# cat ./shell.sh > cdx.txt //大于号表示标准输出
[root@linux-03 ~]# cat cdx.txt
#!/bin/bash
#this is a test shell scripts
x=1
echo $x
[root@linux-03 ~]# ls -l /jjj 2> stderr.txt //通过文件编号2将上重定向符号将错误信息导入到指定文件中
[root@linux-03 ~]# cat stderr.txt
ls: 无法访问/jjj: 没有那个文件或目录
[root@linux-03 ~]# echo "abc123" > passwd.txt
[root@linux-03 ~]# passwd --stdin test < passwd.txt //通过通过小于号将秘钥导入到test账号中
6. 管道符号
可以将前一个命令的值作为后一个命令的参数,可以对该值进行连续操作。
[root@linux-03 ~]# ifconfig eth0 | grep "HWaddr" | awk '{print $5}'
00:0C:29:3A:A0:9A
7. shell变量
shell变量有下列几种变量:1.自定义变量 2.环境变量 3.位置变量 4.预定义变量
1) 自定义变量,用户可以直接赋值
[root@linux-03 ~]# a=1 //直接给a赋值为1
[root@linux-03 ~]# echo $a
1
2) 变量和赋值使用的特殊符号
双引号""当赋值的时候有空格时需要通过双引号指定为一个整体
[root@linux-03 ~]# b="abc def"
[root@linux-03 ~]# echo $b
abc def
单引号赋值的时候有特殊字符时,需要通过单引号将括号中的特殊变成普通字符[root@linux-03 ~]# [root@linux-03 ~]# d='$abc'
[root@linux-03 ~]# echo $d
$abc
反撇号和“$()”可以对括号中的语句先执行
[root@linux-03 ~]# rpm -qf $(which cat)
coreutils-8.4-19.el6.i686
[root@linux-03 ~]# rpm -qf `which cat`
coreutils-8.4-19.el6.i686
3) 位置变量
他根据参数的位置分为$1,$2,$3......$9,$0为命令的变量。
[root@linux-03 ~]# vi expr.sh
#!/bin/bash
#express scripts
expr $1 + $2 //指定$1和$2
[root@linux-03 ~]# sh expr.sh 12 23 //给$1和$2赋值
35 //计算结果
4) 预定义变量
$?:查看上一个命令执行的状态,如果值为0 表示命令执行完成。如果值为非0 表示上一个命令执行时有问题
$0:表示当前执行的脚本或程序的名称。
$#: 表示命令行中位置参数的个数
$*:表示所有位置参数的内容
本文出自 “知识是智慧的火炬” 博客,转载请与作者联系!