shell是一种解释行动语言,shell是通过大量的系统本身命令集合而成。

 每个脚本在执行的时候要个一个可执行的权限

chmod u+x   shellscript.sh

 shell中每个命令的执行返回的结果中,如果正确执行返回0 否则将返回一个非零的状态,在命令执行语句之后加上echo $?可以打印退出状态

 在shell变量中分为临时变量和永久变量

 所谓永久变量就是不会随着你的环境的变换而改变变量的意义

 例如:

 #输出当前PATH路径

echo $PATH

 临时变量只能在环境中有效

 在自定义临时变量中,变量名必须是下滑线和字母开头(大小写均可)

 定义变量(不能有空格):

Num=100

[root@localhost ~]# echo $Num

100

 把命令返回的信息传递给变量

[root@localhost ~]# Time=$(date)

[root@localhost ~]# echo $Time

Fri Aug 16 14:04:38 EDT 2013


[root@localhost ~]# Time=$(date +%D)

[root@localhost ~]# echo $Time

08/16/13

变量之间的赋值:

形如 A=$B

[root@localhost shellscript]# echo $Time

08/16/13

[root@localhost shellscript]# Date=$Time

[root@localhost shellscript]# echo $Date

08/16/13


终端打印:

 echo 和 printf

 echo:

[root@localhost ~]# echo "Welcome to bash "

Welcome to bash

(1)不使用引号的echo时,不能在所要显示的文本中是使用分号(;),因为在分号在bash中被用作命令的定界符,所谓定界符就是命令的分割符  

 echo hello; hello被看作两个命令

 echo hello 和 hello两个命令


(2)使用单引号echo时。

[root@localhost ~]# echo '$Time'

$Time

不在显示变量只显示单引号中的所有的字符

#!/bin/bash


printf  "%-5s %-10s %-4s\n" No  Name Mark


printf  "%-5s %-10s %-4s\n" 1   A   10

printf  "%-5s %-10s %-4s\n" 2   B   20

printf  "%-5s %-10s %-4s\n" 3   C   30


[root@localhost shellscript]# sh ./printf.sh

No    Name       Mark

1     A          10  

2     B          20  

3     C          30


在 printf 中和在C语言中类似 -表示左对齐 如果不使用“-”将按照右对齐

%s %d %c %f 是格式符 \n是换行符

命令参数要在命令和字符串之间

echo:

  -e 能够识别转义符信息

[root@localhost shellscript]# echo "1\t2\t3"

1\t2\t3

[root@localhost shellscript]# echo  -e "1\t2\t3"

1       2       3

   -n 忽略结尾

[root@localhost shellscript]# echo -n 'hello word'

hello word[root@localhost shellscript]#

在bash中每一个变量都是字符串。

环境变量是未在当前进程中定义,而从父进程

查看所有的环境变量:

[root@localhost shellscript]# set | more

BASH=/bin/bash

BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login

_shell:progcomp:promptvars:sourcepath

BASH_ALIASES=()

BASH_ARGC=()

BASH_ARGV=()

BASH_CMDS=()

BASH_LINENO=()

....

删除环境变量:

unset命令主要是用来删除变量和函数

-f 删除函数

-v 删除变量


查看指定PID的环境变量:


cat /proc/$PID(进程ID号)/environ


[root@localhost shellscript]# cat /proc/1601/environ

TERM=linuxPATH=/sbin:/usr/sbin:/bin:/usr/binRUNLEVEL=5runlevel=5PWD=/LANGSH_SOURCED=1LANG=en_US.UTF-8PREVLEVEL=Nprevious=NCONSOLETYPE=vtSHLVL=2UPSTART_INSTANCE=UPSTART_EVENTS=runlevelUPSTART_JOB=rc_=/usr/sbin/vmware-vmblock-fuse[root@localhost shellscript]# cat /proc/1601/environ

.......

每个变量之间都是Null(\0)字符来分割

[root@localhost shellscript]# cat /proc/1601/environ | tr '\0' '\n'

TERM=linux

PATH=/sbin:/usr/sbin:/bin:/usr/bin

RUNLEVEL=5

runlevel=5

PWD=/

LANGSH_SOURCED=1

.........

tr : 是替换的命令

通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能。您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符。您也可以用它来除去重复字符。这就是所有 tr 所能够做的。

   tr用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中控制字符或进行字符转换。使用tr时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。tr刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。

   带有最常用选项的tr命令格式为:

tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] < input-file

这里:

-c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。

-d 删除字符串1中所有输入字符。

-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。

input-file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。

2、字符范围

指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。

[a-z] a-z内的字符组成的字符串。

[A-Z] A-Z内的字符组成的字符串。

[0-9] 数字串。

\octal 一个三位的八进制数,对应有效的ASCII字符。

[O*n] 表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串。

tr中特定控制字符的不同表达方式

速记符含义八进制方式

\a Ctrl-G  铃声\007

\b Ctrl-H  退格符\010

\f Ctrl-L  走行换页\014

\n Ctrl-J  新行\012

\r Ctrl-M  回车\015

\t Ctrl-I  tab键\011

\v Ctrl-X  \030


[root@localhost shellscript]# cat abc.txt | tr "abc" "xyz" >new_abc.txt

[root@localhost shellscript]# cat new_abc.txt

xyz

x

xy

xz

xsgysz


[root@localhost shellscript]# cat abc.txt

abc

a

ab

ac

asgbsc

使用tr命令“统一”字母大小写

(小写 --> 大写)

# cat file | tr [a-z] [A-Z] > new_file

(大写 --> 小写)

# cat file | tr [A-Z] [a-z] > new_file


把文件中的数字0-9替换为a-j


# cat file | tr [0-9] [a-j] > new_file


删除文件file中出现的"Snail"字符


# cat file | tr -d "Snail" > new_file


删除“连续着的”重复字母,只保留第一个


# cat file | tr -s [a-zA-Z] > new_file


删除空行


# cat file | tr -s "\n" > new_file


删除Windows文件“造成”的'^M'字符


# cat file | tr -d "\r" > new_file

或者

# cat file | tr -s "\r" "\n" > new_file


【注意】这里-s后面是两个参数"\r"和"\n",用后者替换前者


用空格符\040替换制表符\011


# cat file | tr -s "\011" "\040" > new_file


把路径变量中的冒号":",替换成换行符"\n"


# echo $PATH | tr -s ":" "\n"