【学习笔记】Shell

Shell是一个命令解释器,它接收应用程序/用户命令,然后调用操作系统内核。

脚本以 #!/bin/bash 开头来指定解析器

执行脚本 bash test.shsh test.sh,本质是bash解析器帮助执行脚本,脚本本身不需要执行
通过 ./test.sh 进行脚本执行,本质是脚本需要自己执行,需要执行权限

Linux 命令

命令作用
touch修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
cd切换当前工作目录
pwd显示工作目录
cat连接文件并打印到标准输出设备上
mv为文件或目录改名、或将文件或目录移入其它位置
cp复制文件或目录
rm删除一个文件或者目录
tree树状图列出目录的内容
ls显示指定工作目录下之内容
which在环境变量$PATH设置的目录里查找符合条件的文件
whereis在特定目录中查找符合条件的文件
chmod控制用户对文件的权限的命令
clear清除屏幕
alias / unalias设置指令的别名 / 删除别名
zip / unzip压缩文件 / 解压缩zip文件
unset删除变量或函数
let执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量
export设置或显示环境变量
netstat显示网络状态
ps显示当前进程的状态
top实时显示 process 的动态
sudo以系统管理者的身份执行指令
shutdown进行关机程序,并且在关机以前传送讯息给所有使用者正在执行的程序

变量

  • 变量名称不能以数字开头,环境变量名建议大写
  • 定义变量 变量名=值 ,等号左右不加空格。撤销变量 unset 变量名,静态变量 readonly 变量不能 unset
  • 变量默认类型是字符串类型,无法直接进行数值运算
  • 变量的值如果有空格,需要加双引号或单引号括起来
  • export 变量名 能将变量提升为全局变量,在其他shell程序中可使用

特殊变量

  • $数字n 表示第n个脚本参数,10以上的参数需要用大括号包含${10},$0表示脚本名称
  • $# 获取所有输入参数个数
  • $? 最后一次执行的命令的返回状态
  • $* 代表命令行中所有参数,把所有参数看成一个整体
  • $@ 代表命令行中所有参数,把每个参数区分对待
for i in "$*"; do 
  echo $i;
done
# 1 2 3
for i in "$@"; do 
  echo $i;
done
# 1
# 2
# 3

引号

  • 单引号:单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
  • 双引号:双引号里可以有变量,双引号里可以出现转义字符
  • 反引号:命令替换。在执行一条命令时,会先将其中的反引号 ``,或者是$() 中的语句当作命令执行一遍,再将结果加入到原命令中重新执行。$():里面放的是命令,用来进行命令替换的。${}:里面放的是变量,用来引用变量的。

运算符

  • $((运算式))$[运算式]
  • expr 加+、减-、乘\*、除/、取余%,expr运算符间要有空格

条件判断

  • 中括号内的条件左右两侧要有空格 [ condition ]
  • 整数比较:小于-lt、小于等于-le、大于-gt、大于等于-ge、等于-eq、不等于-ne
  • 文件权限判断:有读权限-r、有写权限-w、有执行权限-x
  • 文件类型判断:文件存在且为常规文件-f、文件存在-e、文件存在且为目录-d

流程控制

  • if 判断
if [ condition ];then  # if 后要有空格
	content
elif [ condition ];then 
	content
else
	content
fi
  • case语句
case $name in
val1)
	content
	;;
val2)
	content
	;;
*)
	content
	;;
esac
  • for 循环
for ((init;condition;change))
do
	content
done

for name in val1 val2 val3
do
	content
done

从 ubuntu 6.10 开始,ubuntu 就将先前默认的bash shell 更换成了dash shell
使用 sh test.sh 调用脚本不支持C语言格式的for循环,而 bash test.sh可以

s=0
for ((i=1;i<10;i++))
do
	s=$[$s+$i]
done
  • while 循环
while [ condition ]
do
	content
done

read读取控制台输入

read -t 读取等待时间(秒)-p 读取时提示字符 读取值的变量名

系统函数

  • basename [pathname] [suffix] 保留最后一个 / 字符后,后缀suffix前的 字符串
  • dirname abspath 去除文件名,保留目录路径

自定义函数

函数的定义和声明需要在调用函数之前,返回值只能是整数,表示执行成功与否,0表示成功
需要从函数中返回值可赋值给全局变量

[ function ] funcname[()]
{
	content;
	[return int;]
}
output=0
function sum()
{
    s=0;
    s=$[$1+$2];
    echo $s;
    output=$s;
}

read -p "First parameter: " a
read -p "Second parameter: " b
sum $a $b
echo $output

shell 工具

  • 剪切数据: cut -f 列号 -d 分隔符
  • 流编辑器: sed [-e] “command” filename 不改变原文档
    -e表示直接在指令列模式上进行sed的动作编辑
命令功能
a新增,a后面加字符串,在下一行出现。例如第二行加new line字符串 “2a new line”
d删除。例如删除test字符串 “/test/d”
s查找并替换。例如将aaa替换成bbb “s/aaa/bbb/g” g表示global
  • 文本分析:awk [-F | -v] “pattern1{action1} pattern2{action2}…” filename
    -F表示指定输入文件分隔符,-v表示赋值一个用户定义变量
  • 将文件排序:sort -n数值大小 -r相反顺序 -t分隔字符 -k需排序的列

awk

格式

awk [-W option] [-F value] [-v var=value] [-f program-file] [–] [file…]

  • [-F option] - 指定输入分隔符,可以是字符串或者正则表达式
  • [-v var=value] - 赋值一个用户定义变量,将外部变量传给awk
  • [-f program-file] - awk 允许将一段awk 程序写入一个文本文件,然后在awk 命令行中用-f 选项调用并执行这段程序。
  • [-W option]

内建变量

  • $0 这个变量包含执行过程中当前行的文本内容。
  • $n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
  • NR:已输入记录的条数。
  • NF:当前记录中域的个数。记录中最后一个域可以以$NF的方式引用。
  • FILENAME:当前输入文件的文件名。
  • FS:“域分隔符”,用于将输入记录分割成域。其默认值为“空白字符”,即空格和制表符。FS可以替换为其它字符,从而改变域分隔符。
  • RS:当前的“记录分隔符”。默认状态下,输入的每行都被作为一个记录,因此默认记录分隔符是换行符。
  • OFS:“输出域分隔符”,即分隔print命令的参数的符号。其默认值为空格。
  • ORS:“输出记录分隔符”,即每个print命令之间的符号。其默认值为换行符。
  • OFMT:“输出数字格式”(Format for numeric output),其默认值为"%.6g"。

流程控制语句

if(condition1)
  {action1}
else if(condition2)
  {action2}
else
  {action3}
while(condition)
  {action}
for(var in arr)
  {action}

for(var;condition;operation)
  {action}
do
{action} while(condition)

数组

数组的索引可以是数字或字符串,不需要提前声明其大小,运行时可以自动的增大或减小。
不支持多维数组。

常用函数

  • match(s, r [, a]) 检索字符串s匹配正则表达式r的内容,返回是否匹配,未匹配成功,则返回0
  • length(s) 用于返回字符串长度
  • index(s, sub) 用于描述子字符串sub在源字符串s中的位置,如果存在则返回位置,不存在则返回0
  • split(s, a [, r [, seps] ]) 把一个字符串s分隔为单词并存储在数组a中
  • printf 输出到终端
  • sprintf 将输出保存在一个字符串里
  • substr(s,p[,n]) 返回字符串s中从p开始长度为n的后缀部分
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值