linux shell 脚本学习总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux shell 脚本学习总结相关的知识,希望对你有一定的参考价值。

 

shell 编程:

shell 开头必须指定bash:#!/bin/bash

shell 的执行方式:

1.  ./1.sh    执行当前目录下的1.sh,1.sh要是可执行文件

2.  bash  /usr/local/1.sh  

定义变量   aa=’qqq’        =两侧不能有空格,使用变量 ${aa}

Shell特殊含义变量

$$ 取当前脚本的进程id,就是pid

$0  取当前文件名

$n  n是大于0的数字,n是几就是第几个参数

$#  取参数的个数

$* 取所有参数

$? 取最有命令的退出状态,0为没错误

例如:

./1.sh  a b c 

Echo $$

Echo $0 

Echo $1 ,$2

Echo $#

Echo [email protected]

Echo $?

 

 

Shell 运算符     + - * %   加减乘除

Shell 变量运算    $(()) ,$((4-2)),$(($a-$b))

Shell 关系运算符

-eq等于判断,相等返还true

-ne 不等于判断,不相等返回true

-gt大于判断,如果大于返回true

-lt小于判断,小于返回true

-ge大于等于,返回true

-le  小于等于,返回true

 

Shell 布尔运算

!取反,[!false] =true

-o 或运算 , [$a –lt 20 –o $b –gt 100]

-a 与预算,[$a –lt 20 –a $b –gt 100]

 

Shell 字符串运算

==    判断两个字符串是否相等,相等返回true  [$a ==$b]

!=     两个字符串不相等,返回true  [$a != $b]

-z     检测字符串长度是否为0,是返回true  [-z $a]

-n     检测字符串长度是否不为0,不为0 返回true  [-n $a]

Str检测字符串是否为空,不为空返回true ,[$a] 

 

Shell 文件测试运算符

-d  file   检测文件是否是目录文件,是返回true,[-d file]

-f file     检测文件是否普通文件,是返回true

-r  file    检测文件是否可读,是返回true

-w  file   检测文件是否可修改

-x file      检测文件是否可执行

-s file      检测文件是否问空,文件大小大于0,不为空,返回true

-e file      检测文件是否存在,包含目录文件

 

Shell 单引号和双引号的使用

‘’中不能包含单引号,单引号中的转译字符\和变量$字符会原样输出,无实际意义

“”中不能包含双引号,双引号在的转译字符\和变量$字符是有实际含量的,可转译后和取变量后输出

 

Shell 常见通赔符

“*”匹配0或多个字符

?匹配任意一个字符,a?b可匹配acb ,不能匹配ab

A[xyz]b  可匹配 ab之间有x,y,z任何一个的字符串,有且只能有一个,0和多个都不行

A[!xyz]b  匹配 ab之间只能有一个,且非x,y,z中的数据,如abb

A[1-9]    匹配1-9的任意一个,如a1,a9

A{abc,123}  匹配列表中的任何一个,如aabc,a123

 

Shell 特殊字符

=   变量赋值   a=1

$   取变量   $a

“>”输出重定向   cat 1.txt 2.txt >3.txt,会覆盖3.txt

“>>”输出追加重定向  cat 1.txt 2.txt >> 3.txt ,追加到3.txt后

“<”输入重定向

&后台运行命令

;命令分割符,允许一行写多条命令

&&若前一条命令执行成功,继续执行下一条命令

||   前一条命令执行不成功,执行下一条命令

!4  执行history中的第4条命令

 

Shell数组操作

Array=(a1 a2 a3)     数组元素用空格分割,shell只支持1维数组

A[0]=1 ;A[1]=2         通过赋值的方式定义数组

数组的取值方式

${数组名[index]}         如 ${a[0]}

${a[*]},${a[@]}           获取数组的所有元素

Len=${#a[*]}             获取数组的长度

 

Shell 的if 判断

格式:

If [条件成立]

Then

语句

Else

不成立执行语句

Fi

例:

#!/bin/bash

File=”/usr/local/1.sh”

If [-x $file]

Then

Echo $file

Else

Touch $file

Chmod +x $file

Fi

 

Shell 的 case esac判断

格式:

Case 值 in

值1)

命令

;;;;同break,跳出语句

值2)

命令

;;

*)

命令

;;

Esac

例:

#/bin/bash

a=$1

Case $a in

r)

bash  /usr/local/1.sh

;;

c)

touch /usr/local/2.sh

;;

d)

rm–rf /usr/local/2.sh

;;

*)

Bash /usr/local/1.sh

;;

Esac

 

 

Shell for 循环

格式:

For 变量 in 列表

Do

命令

命令

Done

例:用for和if,遍历/root目录下的所有文件,打印出来可执行的文件

#!/bin/bash

Path=’/root’

For file in $path/*

Do

If [-x $file –a –f $file]    #file是可执行文件and file是普通文件

Then

Echo $file

Fi

done

 

 

shell while循环

格式:

while 条件

do

命令

done

 

shell中的函数

function 函数名()

{

命令

Return x

}

例:

#!/bin/bash

functionshowsh()

{

for file in $1/*.sh

do

echo $file

done

}

showsh $1

 

 

 

 

 

 

配置定时任务:

vi  /etc/crontab     定时任务配置

crontab 文件配置  M H D m d cmd    M 分钟(0-59) H 小时(0-23) D 天(1-31)

m 月(1-12),d 一星期的天数(0-6,0位星期天)

*/5  * * * * sh /usr/locat/1.sh  没隔5分钟执行一次

30  21 * * * /usr/local/apache/bin/apachectl restart  每晚21:30重启apache

 

软件安装:

rpm -ivh jdk.rmp    安装jdk ,-i 安装,-v 显示安装信息,-h 显示安装进度

rpm -e  jdk.rpm    卸载jdk

rpm -qa 查询已安装的软件包

yum  install httpd  安装apache

yum list|grep httpd  从yum列表查询需要的包

yum update httpd   升级apache

yum list installed |grep httpd  查询是否安装了apache

yum remove mysql  卸载yum安装的mysql

 

源码安装:

yum install gcc*    gcc  c++的编译器

1.生成makefile 编译文件

./configure 一般安装包下都有一个configure 文件,用来生成makefile 编译文件

./configure --prefix= /usr/local/apache  --with= /aa/cc    --prefix 指定安装目录,--with 指定倚赖文件目录

2.make  编译 makefile文件

make 也需要安装,yum install make,makec,makeg

3.make install

make install  把编译好的文件复制到--prefix 指定的目录,如果未指定就是当前目录

 

 

linux相关目录文件存放内容:

bin  存放普通程序,所有用户都可以用

boot 存放内核及启动所需要的文件

dev 存放设备相关文件

etc 存放系统配置文件

home  存放用户文件的主目录

lib  存放启动时的库文件

mnt 存放临时的映射文件,可以用来挂载usb

proc 存放当前系统状态,进程

root 超级用户主目录

sbin  存放需要的系统管理程序

tmp  存放启动产生的临时文件

var  存放系统产生的经常变化的文件

 

系统cpu及内存的信息文件:

/proc/cpuinfo    cpu信息

/proc/dma     dma通道

/proc/filesystems  文件系统信息

/proc/interrupts  主机中段信息

/proc/ioports   i/o 端口信息

/proc/meminfo  查看内存信息

/etc/passwd   用户详细信息

 

以上是关于linux shell 脚本学习总结的主要内容,如果未能解决你的问题,请参考以下文章

linux学习—shell脚本知识点总结

Linux学习总结(76)—— Shell 脚本日志技巧

Linux学习总结(76)—— Shell 脚本日志技巧

Linux学习总结(六十)shell脚本4-函数及数组

shell脚本学习总结

Linux学习总结(六十二)shell脚本5-监控系统开发