基本shell编程

1.终端打印

echo是终端打印的基本命令。

使用不带引号的echo时,你没法在所要显示的文本中使用,例如echo hello;hello,echo hello为一个命令,第二个hello则被视为另一个命令;

使用带单引号的echo时,bash不会对单引号中的变量求值,而只是原样输出,例如:echo '$var'将会返回$var,而echo $var将会根据变量$var定义与否,返回$var的值,或者什么都不返回;

2. 变量和环境变量

 

#!/bin/bash

#获取应用程序gedit的进程ID
pgrep httpd
#输出:22202

#获取与该进程相关的环境变量
cat /proc/22202/environ
#输出:MANPATH=:/usr/share/bin/manSHELL=/bin/bash

#将替换命令将分隔符进行替换由'\0'变为'\n'
cat /proc/22202/environ | tr '\0' '\n'
#输出:MANPATH=:/usr/share/bin/man
#输出:SHELL=/bin/bash

#给变量赋值
var="value"
echo $var
echo ${var}
#输出:value

fruit=apple
count=5
echo "We have $count $fruit(s)"
#输出:We have 5 apple(s)

#环境变量的2种设置方式:方式1--export
echo $PATH
#输出:/usr/share/xxx/bin:/home/work/bin
export PATH="$PATH:/home/work/temp/bin"
#输出:/usr/share/xxx/bin:/home/work/bin:/home/work/temp/bin

#环境变量的2种设置方式:方式2--export另用
echo $PATH
#输出:/usr/share/xxx/bin:/home/work/bin
PATH="$PATH:/home/work/temp/bin"
export PATH
#输出:/usr/share/xxx/bin:/home/work/bin:/home/work/temp/bin

#获取字符串长度
var=1234567890
length=${#var}
echo length
#输出:10

 

3.数学运算

 

 1 #!/bin/bash
 2 
 3 no1=4
 4 no2=5
 5 result=$no1+$no2
 6 echo $result
 7 #output:4+5
 8 let result=no1+no2
 9 echo $result
10 #output:9
11 
12 #let命令完成基本的算术运算
13 let no1++
14 let no1--
15 let no1+=6
16 
17 #操作符[]完成基本的算术操作
18 result=$[no1 + no2]
19 result=$[$no1 + no2]
20 result=$((no1 + 50))
21 
22 #expr完成基本的算术运算
23 result=`expr 3 + 4`
24 result=$(expr $no1 + 5)
25 
26 #bc可以支持浮点数运算
27 echo "4 * 0.56" | bc
28 #output:2.24
29 no=54
30 result=`echo "$no * 1.5" | bc`
31 echo $result
32 #output:81.0

 

4.文件描述符和重定向

 最常见的文件描述符是:stdin(0)(标准输入),stdout(1)(标准输出),stderr(2)(标准错误)。

>和>>的不同:前者会清空文件,再写入内容;后者会将内容追加到现有文件的末尾;

 1 echo "This is a sample text 1" > temp.txt
 2 echo "This is a sample text 2" >> temp.txt
 3 #将标准错误输出重定向到一个文件,将stdout重定向到另一个文件
 4 cmd 2>stderr.txt 1>stdout.txt
 5 #将stderr转换成stdout,使得两者都被重定向到同一个文件中
 6 cmd 2>&1 output.txt
 7 
 8 #tee可以实现一方面将数据重定向到文件,另外还可以提供一个副本作为后续命令的stdin
 9 cat file1 | tee out.txt | cat -n
10 #tee接收到来自stdin的数据,它将stdout的一份副本写入文件out.txt,同事将另一份副本作为后续命令的stdin
11 #将文件重定向到命令
12 cmd < fiel1

 

5.数组和关联数组

 

 1 #定义数组
 2 array_var=(1 2 3 4 5 6)
 3 #通过下标访问数组值
 4 echo ${array_var[2]}
 5 #以清单形式打印数组中的所有值
 6 echo ${array_var[*]}
 7 echo ${array_var[@]}
 8 #打印数组长度
 9 echo ${#array_var[*]}
10 
11 #对于关联数组,首选需要使用单独的声明语句将一个变量名声明为关联数组
12 declare -A ass_array
13 #添加元素到数组中
14 ass_array[x1]='apple'
15 ass_array[x2]='pea'
16 #显示数组内容
17 echo ${ass_array[x1]}
18 #显示数组索引
19 echo ${!ass_array[*]}

 

6.别名使用

 

1 #创建一个别名
2 alias new_cmd='command seq'
3 #为保证别名一直可用,将其放入~/.bashrc中
4 #每当一个新的shell进程生成时,都会执行~/.bashrc中的命令
5 echo 'alias cmd="command seq"' >> ~/.bashrc

 

7.获取终端信息

8.获取、设置日期和延时

9.脚本调试

10.函数和参数

11.读取命令序列输出

12.以不按回车键的方式读取字符"\n"

13.字段分隔符和迭代器

14.比较和测试

posted on 2012-09-10 21:12  林语堂的生活  阅读(141)  评论(0编辑  收藏  举报

导航