[bash]常用命令和概念

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值