1. echo命令的使用:
#!/bin/bash
echo The time and date are: #echo后面的字符串可以不用引号引起来
date
echo "Let's see who's logged into the system:" #但是当字符串中有''时就必须要用""括起来了
who
#当然用''也可以,-n表示不换行,但是如果不用引号括起来的话将会以最后一个字符作为结束,因此为了凸显末尾的空格还是要用括号括起来的
echo -n 'The time and date are: '
date
!如果不用引号引起来的字符串,多个连续的空格和制表会被当做当个空格处理;
2. 环境变量以及在字符串中使用转义:
#!/bin/bash
echo User info for userid: $USER #可以直接使用系统的环境变量
echo UID: $UID
echo HOME: $HOME
#必须要进行转义,否则会把$1理解成一个变量,发现不存在然后就不理会,然后就打出后面的5了,因此就编程了is 5的错误显示
echo The cost of the item is \$15
3. 变量其实是一种宏:
#!/bin/bash
#bash的变量都是字符串(都不可以直接解析成某种数据类型,比如整型等)
#因此所有变量名仅仅是一个宏,如果想取它所代表的内容则必须使用$运算符进行解析即做宏替换
#只不过这种宏是可以改变其代表内容的变量宏而已!
days=10 #等号两边不能有空格!!!!
guest=Katie
echo $guest checked in $days days ago
days=5
guest=Jessica
echo $guest checked in $days days ago
guest=24 #数据类型可以随意变
echo $guest
guest=$days #必须使用$解析,否则就是赋给它一个字符串了
echo $guest
guest=days
echo $guest
4. 使用``运算符将命令的执行结果作为字符串返回:
#!/bin/bash
testing=`date` #将命令的结果作为字符串返回
echo The date and time are: $testing
today=`date +%y%m%d`
ls -al /usr/bin > log.`date +%y%m%d`
ls -al /usr/bin > log.$today #也行
5. 覆盖输出重定向和追加输出重定向:
#!/bin/bash
date > test6.txt #覆盖的输出重定向
who >> test6.txt #追加的输出重定向
6. 简单的管道使用:
#!/bin/bash
ls /etc | sort #将第一个命令的输出作为第二个命令的输入,sort将文本中的每条记录按照字母顺序从小到大排列
ls /etc | sort | more #将sort的结果再通过管道传给more命令,让最终排序后的结果分页显示
ls /etc | sort > etc.list #sort的结果重定向到一个list文件中
#管道目前最流行的用法就是用于ls的more显示,是大量的结果分页显示
7. 进行简单的数学计算:
#!/bin/bash
#在bash中计算数学表达式尽量使用$[表达式]的方式
#$[]运算符可以将数字的字符串解析成数值进行计算,同时返回计算结果的字符串形式
#毕竟bash中的所有变量都只能存放字符串
var1=$[ 1 + 5 ] #[]两边加不加空格无所谓
echo $var1
var2=$[$var1 * 2] #...
echo $var2
var1=100
var2=50
var3=45
echo The final result is $[$var1 * $[$var2 - $var3]] #严格地使用$[]运算符进行运算
var4=$[ $var1 * ( $var2 - $var3 ) ] #只要在$[]之中,对于里面的复合子表达式就不需要再用$[]括起来,而可以直接使用()括起来
echo $var4
#bash不支持浮点数!!!要计算浮点数只能使用bash的计算工具bc
echo $[ 15 / 4 ] #因此不能直接使用bash来计算浮点数,得到的结果是截断的!
8. 使用内联输入重定向来利用bc计算浮点数:
#!/bin/bash
#bc是一个bash内置的计算器,可以计算浮点数
#scale是bc里面的一个内置变量,可以规定结果所显示的小数的位数,否则默认是不显示小数的!
echo The answer is `echo "scale = 4; 2.342 / 23.24" | bc` #注意!一定要加""否则会产生文本解析错误
var1=24332.23
var2=-234.2234
var3=`echo "scale = 4; $var1 / $var2" | bc` #变量的宏$var是全局作用的,不管在几层引号中都是可以使用的
echo $var3
#使用内联输入重定向来完成对某一复杂浮点数的计算
#内敛输入重定向可以直接在终端输入重定向的内容,这在终端上看似没有什么用,但是在脚本中可以完成一些特定任务
#前后的两个EOF表示内敛输入重定向的起始和结束
#bc语法和C语言类似,也空格可以随意加,并且可以使用当前脚本中的变量
#注意:$var只是一个单纯的文本替换,并且是全局的,类似宏,将该变量所代表的字符串内容替换到$var出现的位置
#在bc里面也可以定义变量,但是对于外部是无效的,里面的变量脚本中无法调用,只有bc内部才可以使用
#本次bc调用结束这些变量也将会被释放掉
#bc里面可以轻松写出各种C语言里面的复杂表达式
var4=`bc << EOF
scale = 17
a1 = $var1 * $var2
b1 = $var2 + $var3
( a1 + b1 ) * ( a1 + b1 )
EOF
`
echo $var4
!如果不使用内敛输入重定向,在一行中有多个表达式则会按顺序输出每个表达式结果;
9. 使用wc命令(word counting)与输入重定向统计文件中的行数、词数与字节数:
#!/bin/bash
#直接作用于文件则在输出末尾还会显示文件名
wc ./test.txt
#如果用输入重定向则在输出末尾不显示文件名
wc < ./test.txt
10. 环境变量$?——上一条命令的返回码:
#!/bin/bash
#$?也是一个系统环境变量,表示上一条执行的命令的返回值
#如果上一条命令顺利执行则返回0,否则返回一个整数,范围为0 ~ 255
#每种返回码都表示不同的错误类型,当然0是代表成功执行,其余都代表异常
echo sdfsdfs #顺利执行echo命令返回0
echo $?
sdlfsdfs #命令不存在返回非0
echo $?
11. 自己设定脚本的退出码:
#!/bin/bash
#可以通过exit命令修改脚本的退出状态码
var1=10
var2=234
#退出状态码是一个0 ~ 255之间的整数,如果大于255结果会自动模除256
exit $[$var2 % $var1]
当脚本执行完成后使用命令echo $?可以看到退出码即为exit命令设置的数字
***.注意!终端中$符号表示PS1,>符号表示PS2