Linux 学习笔记之shell基础

Bash基本知识:

1.shell的作用:为用户提供启动程序、管理文件系统的文件及运行在Linux系统上的进程的接口
2.shell的核心是命令行提示符
3.以逗号分隔的格式.csv
4.脚本可传递参数,变量 $0 表示运行的脚本名,若通过给定shell程序运行,则包含其shell程序名及脚本名,$1 则表示第一个参数,以此类推。。。调用参数变量时最好先确认是否包含参数
5.变量 $# 表示运行脚本时所携带的’参数’总数,当调用 最后一个参数时可通过,必需使用!替换$,例如: ${!#}
6.访问所有参数:$* 将所有参数保存为一个字符串值,$@ 将所有参数当做一个字符串数组,每个参数以空格分隔,遍历时$*当做一个整体,$@将会单个参数遍历
7.shift命令将会将所有参数整体左移一个参数,第一个参数将被移出
8.exec可定义文件描述符,每个进程一次最多有9个文件描述符,0–STDIN,1–STDOUT,2–STDERR
在脚本编写中可永久行的重定向输入输出:

exec 0<file	#重定向从file标准输入
exec 1>file	#重定向标准输出至file
exec 2>file	#重定向标准错误输出至file
exec 3>&1		#将3定义为标准输出的文件描述符之一,此时重定向至3文件描述符则从3定义的对象输出,当前即标准输出
exec 4<&0		#将4定义为标准输入的文件描述符之一,此时重定向至4文件描述符则从4定义的对象输入,当前即标准输入
exec 4>file 	#对4输出则是对file输出
exec 5<file	#对5读取则是对file读取
[ commadns < file | commands 0 < file ]	#输入重定向至file
[ commands > file | commands 1 > file ] 	#输出重定向至file
[ commadns > file | commands 2 > file ]	#错误重定向至file
Commands &>2	#标准及错误输出重定向至文件描述符2对应的文件
exec分配文件描述中,取消已定义文件描述符或者重新定义已定义的文件描述符后,当以文件描述符作为重定向对象输出时都会
清空文件后输出,因为对定义文件描述符时会对文件的位置光标重置首位
若需定以后需追加模式,则定义是以>>定义而不是>,通过使用Commands >> 1是错误的,这种方式只能针对文件而不是文件描
述符,正确使用:exec 3>>file,Commands > 3,
对使用重定向><至文件的形式,每一次读取或者输出都是重文件首位开始读取,文件位置指针不会被保存,则意味着输出是覆盖
形式,读取则是永远首行(默认情况下)
>>file则可以追加输出,在结构循环语句结尾处输入输出重定向则是在循环体中永久性的更改,因此文件位置指针会被保存
关闭文件描述符:使用exec命令重定向至&-,如:exec 3 > &-
lsof  命令会列出所有定义的文件描述符,如:lsof -p $$ -a -d 0,1,2  ,$$为当前shell的PID,指定显示0.1,2的FD,-a==AND

Bash 命令行快捷键

终止命令执行:Ctrl+c
移动至命令最前端:Ctrl+a
移动至命令最尾端Ctrl+e
命令开始处至光标处删除:Ctrl+u
光标至命令行尾删除:Ctrl+k
删除此处到左边的单词:Ctrl+w
查找历史命令:Ctrl+r
清屏:Ctrl+l同clear
调用上一个命令的末端参数:ESC-. Alt+.重复可往前推

PS:以上快捷键是基于gnome图形界面下的虚拟终端记录

Bash Script

1.在第一行指定运行脚本解释器:#!/bin/bash#为注释符!为运行符
2.强引用’ ‘已纯字符串表示,弱引用” “变量可实现转换,转义字符等
3.输出命令echo STRING
4.可使用系统层次的全局环境变量、用户层次的局部环境变量、脚本层次的全局变量和本地变量
5.引用命令的执行结果:] $ $(Command) `Command`反引号
6.输出重定向>,追加重定向>>,输入重定向<,内联输入重定向<<以指定文本标记符结束输入并且该标识符需以行首结束,管道输出|将命令的输出作为下一命令的输入
7.数学表达式运算:
bash数学运算只支持整数运算
1】expr NUM ±*/ NUM其结果输出至stdout数字与运算符之间必须空格分隔,*号必须转义,其他man expr,由于expr 为命令故在赋值时需命令引用。该命令基于bourne shell
2】对于数学表达式运算赋值: $[ operation ] ,方括号代替expr其他运算方式一样,但方括号需与操作数空格分隔
3】使用命令 bc 做计算,可计算浮点型
8.指定退出码使用exit NUM,默认情况下以最后一个命令执行结果为退出码.
9.逻辑语句:

1】判断语句
if command_$?
then
… … exec command
elif commadn_$?
then
… … exec command
else
… … exec command
fi


条件测试中test等同于[ ]方括号及操作符/数以空格分隔
test:支持数值比较,字符串比较,文件比较;具体man test,在测试目录文件时注意使用引号,以防文件目录包含空格
字符串大小比较中><需转义,即逐字母比较,小写大于大写,与sort相反
复合条件测试分两种:[ condition ] && [ condition ],[ condition ] || [ condition ]
… … … … … … … …[ condition -a condition ],[ condition -o condition ]
(( expression )):[ <, > , == ,val++ , val-- , ++val , --val , ! , ~(位求反) , **(幂运算) , <<(左移位) , >> , &(位与) , | , &&(逻辑与) , || ]
[[ expression ]]:多出模式匹配,可采用正则表达式
2】case选择语句

case VALUE in
pattern | pattern) command;;
pattern) command;;
*) default_command;;
esac

3】遍历for语句

for VAR in value_list
do
… … commands
done


变量VAR遍历value_list中的每一个值
value_list以空格为分隔符,可通过内部字段分隔符(internal field separate)IFS环境变量定义字段之间的分隔符
默认:空格、制表符、换行符

4】C style for 语句
for (( i = 0; i<>!==;i+±-))
do
… … commands
done


注意双括号

5】 while 语句
while test commands
do
… … commands
done


条件满足则执行,终止于不符合条件,test可替换[ ],while 可使用多个测试命令但最后一个测试命令退出码为准

6】until 语句
until test commands
do
… … commands
done

条件与while相反,不满足则循环,符合条件终止,其他与while一样

7】break N跳出N层循环体,不指定则跳出当前循环体
8】continue N结束N层循环,继续N+1层循环,不指定。。。。。
9】所有语句可在的结尾命令如fi,done…使用重定向或者管道

10.在脚本中分离参数和选项
1】在Linux中通过以- -分离前端选项和后面的参数
2】并以case语句来匹配$[num],遇到- -则跳出循环体
3】使用getopt命令转换运行给出的参数至标准输出,需替换原位置参数使用set –
getopt对引号包裹的带空格参数,不会将其当做一个整体参数,而是以空格为分隔符的多个参数

例如:set -- $(getopt -q ab:cd "\$@")

4】getopts一次处理一个参数,处理完所有将返回非0退出码,命令将当前参数保存到指定变量,OPTARG环境变量保存后跟的参数值,OPTIND保存当前需要处理参数值位置

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值