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  阅读(85)  评论(0编辑  收藏  举报

导航