#! xxxx 》》指定脚本的运行环境
#xxxx为注释
echo:把其参数传递给标准输出,若是字符串的话需要用双引号把它包含起来
-n:不换行输出
需要给文件赋值权限才能运行
$:存取变量时需要的字符
如:echo $log
ps:变量只在该脚本有效
source shell脚本文件:强行让一个脚本影响其父shell环境(变量在shell中可见)
export让脚本可以影响其子shell环境
父Shell、子Shell
当在执行一个Shell Script时,父Shell会根据Script程序的第一行#!之后指定的Shell程序开启一个子Shell环境,然后在子Shell中执行此Shell Script。一旦子Shell中的Script执行完毕,此子Shell随即结束,回到父Shell中,不会影响父Shell原本的环境。
子Shell环境拥有与父Shell相同的环境变量、标准输入、输出、错误等。
通过$SHLVL可以知道当前shell的层次
unset 变量:注销变量
输出符号本身加\
花括号{}来限定一个变量的位置
如: word="big"
echo "This apple is ${word}ger"
$数字:代表传入的参数,$0为脚本名字,其他按顺序
$*、$@:包含参数列表
$#:包含参数的个数
$[]表示形式告诉shell应该对其中的表达式求值
[base#]n表示从二到三十六进制的任何一个n值,如:2#10表示2进制数10
expr:对表达式执行求值操作,其命令会同时把结果输出,注意:数字和运算符之间要有空格
例: var=`expr [ $var - 1 ]`
let:计算整数表达式的值
if语句:如果test-command为真则执行command否则跳过if结构,fi为结束标志
if [ test-command-1 ]
then
command-1
elif [ test-command-2 ]
then
command-2
....
else
commands
fi
ps:上述表达式若有一个条件为真则在执行完其命令后就退出而不会继续判断,除非一直用if then
case中才会出现;;,遇到这条命令就直接跳到case最后,不可被省略
if判断:不执行任何判断,接受一个程序名作为参数,然后执行这个程序,若返回值为0表示真,返回值为非0表示假
if条件必须有返回值才能判断:
test expr
[expr]
上述两者等同,可以对字符串比较、文件测试和数字比较进行测试
ps:赋值语句=左右不能有空格,而条件测试命令=左右需要有空格
ps:Bash会自动给没有值得变量加上引号
&&和||可以用来代替test和[]内建的-a和-o,但更多地是用来创建命令表,命令表可以利用一个命令的退出值来控制是否执行另一条命令
如:[ -d /etc/rc.boot ] && run-parts /etc/rc.boot
循环语句:
1.while [ test-commands ](真返回为0,直到返回非0为假为止)
do
commands
done
2.until [ test-commands ](直到条件为真返回0)
do
commands
done
3.for variable [in list](逐一取出列表的值)
do
commands
done
ps:shell提供一个seq工具接收一个数字范围然后转换为一个列表
read:接受用户输入的参数并将其存放在所接受的一个变量,若无变量则存在变量REPLY中
若提供多个变量名作为参数则read将接收到的行拆开,只认空格、制表符、换行符
read也常常用来在输出一段内容后暂停,等待用户发出“继续”的指令
exit:强行退出一个脚本,并且向调用这个脚本的进程返回一个整数值
ps:一般来说一个进程成功运行后,总是向其父进程返回数值0.其他非零返回值都表示发生了某种异常。
trap:捕获一个信号,参考第十章
如:trap `echo "Type quit to exit"` INT 》》捕捉到INT信号(Ctrl+C)时忽略该信号
其他命令:
cut:分割 cut -c3-6 city.txt 》》将该文件内容的每一行的第3到6个字符提取出来
-f数字:指定的字段 -d:指定字段和字段之间的分隔符
sort:接受输入行并对其按照字母顺序进行排列,不改变源文件
-r:颠倒排列的顺序
-k:指定按照另一个字段排序,默认的话按第一个字段执行排序
uniq:从已经排好序(相同的几行必须连在一起)的输入中删除重复的行,不改变源文件
ps:可以和sort结合管道达到上述要求
tr:按照用户指定的方式对字符执行替换,并将替换后的结果在标准输出上显示(不改变源文件)
多个字母替换为同一个字符时可以:tr "ABC" "[Z*]" < city.txt
tr "A-C" "[Z*]" < city.txt
--delete "字符串" < 文件 :指定删除某些字符
wc:统计文件中字节、单词以及行的数量
substr:从字符串中提取一部分
expr substr "字符串" 提取开始的位置(从1开始) 需要提取的字符数
seq:产生一个整数数列,可以指定范围
seq 数字 数字
ps:可以指定步长,如:seq 9 -3 0 》》生成0-9数列,递减数列,每次减3
alias:为命令设置别名
如:alias ll='ls -l'
~/.bashrc:用户可以将想要在系统启动时自动执行的任务写在该文件里面
如:alias rm='rm -i'