SHELL

shell脚本运行4种方法:

1. chmod a+x myshell.sh

./myshell.sh

2. . myshell.sh

3. source myshell.sh

4. /bin/bash myshell.sh

shell 语法:

数据类型: 字符串 String

变量: 全局变量 ---- 环境变量

局部变量 ---- 本地变量

变量名=变量值 VAR=10

对比:
$变量名: 取变量的值

${变量名}: 取变量的值(更安全)

$(命令): 取命令执行结果

$((变量名)): 对变量执行算数运算

$[变量名]: 对变量执行算数运算

导出:export

删除:unset

* ? [0123456789][0-9]

命令代换:

$() == `` VAR=date

算数代换:

$(()) == $[]

转义字符:

\ 转特殊意 , 转本身意

--

单引号: 括字符串 --- 不能展开变量

双引号: 括字符串 --- 可以将变量 展开。 --- 建议,在取变量值时,都加“”。尤其是在 测试条件中。

控制语句:if、else、switch case、for、while ...

条件判别表达式:真:0 假:1

test 测试条件

[空格 测试条件]

整数判别符: -eq 等于 只能用在 整数之间。

-ne 不等于

-gt 大于

-lt 小于

-ge 大于等于

-le 小于等于

文件类型判别符:-d 目录文件

-f 普通文件

-p 管道

-l 软连接

-c 字符设备

-b 块设备

-s socket

字符串长度判断:
-z 空字符串(长度0)

-n 非空字符串(长度非0)

字符串判等: 不能使用 整数判断的 符号

= 相等

!= 不等

逻辑运算: a -- && 逻辑与

o -- || 逻辑或

! 逻辑非

【if语句】:

if [ 判别条件 ]; then

执行内容

elif [判别条件]

执行内容
else
执行内容
fi
demo:

! /bin/bash

echo "请输入你要判别的文件名:"

read file_name

if [ -f "$file_name" ];then
echo 'it is a file'

elif [ -d "$file_name" ];then

echo 'It is a dir'
elif [ -p $file_name ];then

echo 'It is pipe'
else
echo 'it is not a known file'
exit 1
fi

【case分支语句】:

! /bin/bash

echo "请输入你要判别的文件名:"

read file_name

case "$file_name" in

testfile|file1|file2)
echo "it is a file";;
testdir|dir1|dir2)
echo "it is a dir";;
p1)
echo "It's a pipe";;
*)
echo "not found";;

esac

【for循环语句】:

! /bin/bash

for TEST in ls;do
ls -l $TEST
done

【while循环换语句】:

! /bin/bash

count=1

read passwd

while [ $passwd != "itcast" -a $count -lt 3 ]; do
echo "Try again"

count=$[count+1]

read passwd

done

【位置参数】:

$0: 类似于C中的argv[0] ---- 描述可执行程序名

$1-$N: 类似于C中的argv[1]--argv[N] 命令行参数

$#: 计算命令行参数的个数(不包含 argv[0])

$*/$@: 表示所有的 argv 命令行参数(不包含 argv[0])

$$: 取出本进程的进程号

shift 左移 命令参数


函数:
函数名(){

函数体
}

函数传参: 函数名 参数1 参数2 参数3 ...... 参数N

函数外:$0 ---命令行参数的 argv[0]

$1-$N 命令行参数的 argv[1]-argv[N]

函数内:$0 ---命令行参数的 argv[0]

$1-$N 函数的参数1--参数N

面向对象: 继承、重载、封装、多态。。。

框架:


正则表达式:

字符类使用的 符号:

. 匹配一个字符

* 匹配多个字符

[]匹配指定范围的字符

- 在[]内, 设定范围

^ 匹配除该符号以后的其他字符, 在[]内使用

grep 找文本容

grep -R -r “” /目录位置

find 找文件

-name

find ./ -name "init" find /目录位置 参数 “匹配项”

-size

find ./ -size +3M -size -7M

find ./ -size +20k -size -80k

find ./ -size +200 -size -500 --> 单位: 512B(扇区的大小 0.5k)

-type
-d/-f/-p/-l/-s/-c/-b

find ./ -type f

-maxdepth

find ./ -maxdepth 2 -type d

-exec

find ./ -maxdepth 2 -type d -exec ls -ld {};

-ok: 交互版的 -exec

find -maxdepth 1 -type d -ok rm -rf {};

-xargs

find -maxdepth 1 -type f | xargs ls -ld

-print

touch test\ test.c ---》 “test test.c”

find -maxdepth 1 -type f -print0 | xargs -0 ls -ld

-atime|ctime|mtime: 天为单位

a:访问

c:文件内容修改

m:文件属性被修改

-amin|cmin|mmin:分钟为单位

find ./ -name "syslog*" -mtime +5 -exec ls -l {} ;

sed ----行

格式1: sed 参数 脚本语句(/pattern/动作) 目标文件

格式2: sed 参数 -f 脚本文件 目标文件

a: 追加

i:插入

d:删除

s:替换

s/原串/目标串/g ---> action

p: 打印 ---- 满足条件打印两次,没有满足打一次。

-n: 原输出静默。

-i: 反应到源文件中

&: 替代原串

\1 \2: 原串中的第一个字符,第二个字符。

贪心算法。

基础正则。 -E 选用扩展正则。

awk ----列。

格式1: awk 参数 脚本语句(pattern { 动 作 }) 目标文件

格式2: awk 参数 -f 脚本文件 目标文件

awk '$2>75 {print $0} $2<75 {printf "%s %s\n", $0, "reorder"}' testfile

awk '$2>75 {print $0} $2<75 {printf("%s %s\n", $0, "reorder");}' testfile

awk '$2>75 {print $0} $2<75 {print $0 " reorder";}' testfile

CC CFLAGS CPPFLAGS...

脚本语句:

1. /pattern/ { 动作 }

2. condition { 动作 }

condition :BEGIN、END

c中使用正则。

egrep "^([0-9]{1,3}.){3}[0-9]{1,3}" test.regex

1. regcomp(): 编译正则表达式。————结构体。--》描述 "^([0-9]{1,3}.){3}[0-9]{1,3}"

2. regexec(): 执行正则表达式。------》 用结构体样式的正则,匹配字符串

3. regfree(): 释放正则表达式。————结构体。释放

regerror():正则错误处理函数。 perror

1. int regcomp (regex_t *compiled, const char *pattern, int cflags)

参1: 传出参数。结构体,用于保存转化后的正则表达式。 regex_t regex; &regex

参2:正则表达式字符串。

参3: REG_EXTENDED : 选用 扩展正则

REG_NOSUB : 当指定该选项时。说明,不保存正则表达式匹配后的结果。

影响regexec() nmatch = 0 和pmatch = NULL;

REG_ICASE: 忽略大小写

REG_NEWLINE: 识别换行符。 ^ $

返回值:成功:0 失败:错误号。

2. int regexec (const regex_t *compiled, const char *string, size_t nmatch, regmatch_t matchptr[], int eflags)

参1:regcomp传出参数。已经转化成结构体正则表达式

参2:待匹配字符串

参3:数组大小。欲使用该参数,要求:regcomp() 参3,应设置为非 REG_NOSUB 。

参4:用于盛装匹配成功的结果集的数组。 欲使用该参数,要求:regcomp() 参3,应设置为非 REG_NOSUB 。

参5:设置^ $ 失效。

REG_NOTBOL、REG_NOTEOL

返回值:成功:0 失败:错误号

3. void regfree (regex_t *compiled)

posted on 2024-10-20 13:00  pony1223  阅读(176)  评论(0)    收藏  举报

导航