shell命令和编程

解析器

脚本第一行 以 #!bin/bash 开始 指定解析器未bash

执行方式:

1、bash(或sh)+路径 不赋予可执行权限

2、更改文件的执行权限,直接路径执行 chmod+x 文件名

3、source或. +文件名 source 在本shell内执行 环境变量生效问题和继承关系

变量

环境变量

系统变量

用户变量

全局变量:对子shell也有效

局部变量:只对当前bash有效

env 看全部的变量 printenv 变量名 打印指定变量

环境变量 带$符号 大写

set 看当前定义的全部变量

自定义变量:变量名=变量值 =号前后无空格 撤销变量 unset 变量名

声明静态变量 readonly 变量名 不能unset

自定义变量为局部变量 export 提升/导出为全局变量

子shell中更改不影响父shell,父shell中声明全局变量子shell可以继承

所有变量都是字符串 变量由空格需要用引号

运算符为双括号 a=((1+5)) 或中括号

特殊变量 $n n表示第几个参数 占位符 $0 获取该脚本名称

$# 获取输入参数个数 多用于循环

$* 把所有参数看成一个整体 类似字符串

$@ 把每个参数区分对待 类似列表

$? 查看返回值 为0则执行

条件判断

1、 test 测试 $?获取返回值 0 为真 1为假

2、用[ ]括住条件表达式 表达式前后要有空格

字符串比较 用=号和!=号 前后空格

两个整数之间比较 -eq 等于 -ne 不等于 -lt 小于 -le 小于等于 -gt大于 -ge大于等于

判断权限 -r /w/x +文件名

判断文件 -e 是否存在 -f 是否为常规文件 -d 是否为目录

多条件判断 [条件表达式] && echo ok || echo nook

流程控制

流程控制

if 判断 if [条件表达式];then

程序

elif [条件表达式];then

程序

else [条件表达式];then

程序

fi

&&与 -a等价 || 与-o等价

if [条件1] && [条件2] ;then ; fi

if [ 条件1 -a 条件2 ];then ; fi

case $变量名 in

值1 )

变量值为值1,执行程序一

;;

值2 )

程序二

;;

* )

变量值不是以上的值,执行此程序

esac

for循环

1、for (( 初始值;循环控制条件;变量变化 ))

do

程序

done

2、for 变量 in 值1 值2 ...

do

程序

done

while循环 初始值在外面先定义

while [条件判断式] ;do 程序 ;done

循环1+到100

sum=0

for (( i=0;i<=$1;i++ ))

do

sum=$[ $sum+$i ]

done

for i in {1..100};do sum=$[$sum+$i];done;echo $sum

a=1

while [ $a -le $1 ]

do

sum=$[ $sum + $a ]

a=$[$a+1]

done

let改写

a=1

while [ $a -le $1 ]

do

let sum+=a

let a++

done

控制台输入

读取控制台输入 read 选项 参数

选项:-p 指定读取值时的提示符 -t 等待多少秒,没有则一直等

参数:表示读取值在程序中的变量名

read -t 10 -p "输入姓名 " name

echo "welcome, $name"

函数

命令替换$(系统命令)

basename 路径 [suffix] 获取路径中的文件名(去除后缀),即最后一个/之后的文件名

dirname 截取最后一个/之前的路径名

自定义函数

[function] funname[()]

{

Action;

[return int ;]

}

使用函数前需要声明,逐行执行,函数返回值只能用$?获取,返回值为0-255的整数

获取两个参数的和

function add(){

s=$[ $1 + $2 ]

echo $s

}

read -p "请输入第一个数" a

read -p "请输入第二个数" b

add $a $b

获取两个参数的和

function add(){

s=$[ $1 + $2 ]

echo $s

}

read -p "请输入第一个数" a

read -p "请输入第二个数" b

sum$(add $a $b)

echo $sum

正则表达式入门

特殊字符:^a 以a开头的字符

a$ 以a结尾的字符

. 为单字符通配符

o* 表示o出现0到n次 *表示前一个字符出现任意次 .* 统配

[] 表示字符区间, [6,8]或[68]匹配6或8,[0-9]匹配一个0-9的数字,

[0-9]* 匹配一个任意长度的数字字符串,[a-z]匹配一个字母字符,

[a-c,e-f] 匹配a-c或e-f的任意字符

\ 转义字符 正则扩展 -E {9}表示前一位重复9次

文本处理

cut[选项参数]文件名 剪切指定文本 通常和管道一起使用

选项 -f 列号 提取第几列 -d 分隔符 按照指定分隔符分割 默认分隔符为制表符

-c 按字符进行切割 后加n表示取第几个字符

awk [选项] ' /pattern1/{action1} /pattern2/{action2}... ' 文件名

选项: -F 指定分隔符 默认为空格 -v 指定用户定义变量,参与代码计算

pattern 匹配模式(如正则) action 匹配时执行的命令

可在引号中加BEGIN{}和END{},操作开始和结束

扩展功能:内置变量

FILENAME 文件名 ,NR已读的记录数 ,NF 浏览记录的域的个数(切割后列的个数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值