首页 > 代码库 > linux shell 脚本学习总结
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 $@
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 脚本学习总结