说明
1、#表示root用户登录,$表示普通用户登录
2、|符号是管道符,用于把|前的输出作为后面命令的输入
3、>表示追加并覆盖的意思
4、>>两个大于符号,表示追加
命令
1、cd命令:切换目录
cd /home 进入/home目录
cd ../返回上一级目录
cd ./当前目录
2、ls命令:产看文件及目录
ls ./ 查看当前目录所有的文件和目录
ls -a 查看所有的文件,包括隐藏文件,以.开头的文件
ls -l 查看某个文件或者目录的权限,它以显示数据的第一个字段为准,第一个字段由10个自负组成
[root@node1 ~]# ls -l monitor_log.sh
-rw-r--r-- 1 root root 91 May 7 20:21 monitor_log.sh
第一位表示文件类型,-表示文件,d表示目录;后面每三位为一组。
第一组:2-4位表示文件所有者的权限,即用户user权限,简称u
第二组:5-7位表示文件所有者所属组成员的权限,group权限,简称g
第三组:8-10位表示所有者所属组之外的用户的权限,other权限,简称o
rwx权限可以用数字来表示,分别表示为r(4)、w(2)、x(1)
3、pwd命令:显示当前所在的目录
4、mkdir:创建目录
mkdir test ,命令后接目录的名称
5、rmdir:删除空目录
6、rm:删除文件或目录
rm –rf test.txt (-r表示递归,-f表示强制)
7、cp:拷贝文件
cp old.txt /tmp/new.txt
如果拷贝目录需要加 –r参数
8、mv:重命名或移动文件或目录
mv old.txt new.txt
9、touch:创建文件
touch test.txt 如果文件存在,则表示修改当前文件时间
10、Useradd:创建用户
useradd jpc,userdel删除用户
11、Groupadd:创建组
groupadd jpc1,groupdel删除组
12、find:查找文件或目录
find /home -name "test.txt"
find 后接查找的目录,-name指定需要查找的文件名称,名称可以使用*表示所有
find /home -name “*.txt” ;查找/home目录下,所有以.txt结尾的文件或者目录
13、cat:查看文件内容
cat test.txt 可以看到test.txt内容
14、more:查看文件内容
分页查看,cat是全部查看,如果篇幅较多只能看到最后的篇幅
可以配合cat使用:
cat test.txt|more 分页显示text内容
15、echo:回显
echo ok 显示ok,输出什么打印什么
echo ok > test.txt 把ok字符覆盖test.txt的内容,>表示追加并覆盖的意思
echo ok >> test.txt 表示向test.txt文件追加OK字符,不覆盖原文件里的内容
16、chown 改变某个文件的所有者或者所属的组
chown -R test:test monitor_log.sh
vi操作
命令行模式:vi默认打开就是命令行模式
文本输入模式:命令行模式下按i进入文本输入模式,按esc进入命令模式,
末行模式:命令行模式按:进入末行模式
:wq表示保存退出
:q!不保存退出
Shell脚本
Bourne Again Shell(/bin/bash)
1、运行脚本:
作为可执行程序
需要在第一行指定解释器 #!/bin/bash
将代码保存到test.sh
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
作为解释器参数
/bin/sh test.sh
/bin/php test.php
2、Shell变量
(1)定义变量时,变量名布甲美元符号($,php语言中变量需要)
you_name="jpc"
变量名和等号之间不能有空格
首字符必须字母
中间不能有空格,可以下划线
不能使用符号
不能使用bash里的关键字(可用help命令查看保留关键字)
(2)使用变量,只用在变量名前加美元符号即可
you_name="jpc"
echo $you_name
echo ${you_name}
花括号可不写,为了帮助解释器识别变量的边界
(3)只读变量,使用readonly命令讲变量定义为只读变量
#!/bin/bash
myUrl="http://www.w3cschool.cc"
readonly myUrl
(4)删除变量,使用unset命令删除变量
unset variable_name
unset命令不能删除只读变量
(5)变量类型
局部变量:在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要时,shell脚本也可以定义环境变量
shell变量:shell变量是由shell程序设置的特殊变量,shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
(6)Shell字符串
可用单引号,双引号,也可以不用引号
单引号:
单引号里的任何字符都会原样输出,单引号字符中的变量是无效的
单引号字符串中布恩那个出现单引号(对单引号使用转义字符后也不行)
双引号:
双引号里可以有变量
双引号里可以出现转义字符
拼接字符串
you_name="jpc"
greeting="hello,"$you_name"!"
greeting_1="hello,${you_name}!"
echo $greeting $greeting_1
获取字符串长度
string="abcd"
echo ${#string} #输出4
提取字符串
string="runoob is a great site"
echo ${string:1:4} # 输出unoo
从第二个字符开始截取四个字符
查找子字符串
查找字符“i或s”的位置
string="runoob is a great company"
echo `expr index "$string" is` #输出8
`是反引号(英文输入法左上角)
(7)Shell数组
bash仅支持一维数组,没限定数组的大小
定义数组
括号表示数组,数组元素用空格隔开
数组名=(值1 值2 值3 ... 值n)
也可单独定义数组的各分量
可以不使用连续的下标,而且下标的范围没有限制
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
读取数组
#{数组名[下标]}
使用@符号可以获取数组中的所有元素
#{数组名[@]}
获取数组的长度
获取数组长度的方法与获取字符串长度的方法想通
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
(8)Shell注释
以“#”开头的行就是注释,会被解释器忽略
sh里无多行注释
3、Shell传递参数
可以在执行Shell脚本时,向脚本传递参数,脚本内获取参数的格式为$n n表示一个数字,1为执行脚本的第一个参数,2第二
$0为执行的文件名
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
如"$*"用"括起来的情况,以"$1 $2"形式输出所有参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数
如"$@"用"括起来的情况,以"$1" "$2"形式输出所有参数
$- 显示Shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态,0表示没有错误,其他任何值都表明有错误
4、Shell运算符
算数运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符
原生bash不支持简单的数学运算,通过expr来实现
两个数相加
#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为:$val"
注意:
表达式和运算符之间要有空格
完整的表达式要被``包含,反引号
算术运算符
其他类似上述加法,用反引号包含
条件表达式要放在方括号之间,并且要有空格
例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字
-eq 检测两个数是否相等,相等返回true
-ne 检测两个数是否相等,不相等返回true
-gt 检测左边的数是否大于右边的
-lt 检测左边的数是否小于右边的
-ge 检测左边的数是否大于等于右边的
-le 检测左边的数是否小于等于右边的
布尔运算符
!非运算,表达式为true返回false
-o 或运算,有一个表达式为true返回true
-a 与运算,两个表达式都为true返回true
逻辑运算符
假定变量 a 为 10,变量 b 为 20:
&& 逻辑的AND
[[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的OR
[[ $a -lt 100 || $b -gt 100 ]] 返回 true
字符串运算符
= 检测两个字符串是否相等
!= 检测两个字符串是否不相等
-z 检测字符串长度是否为0
-n 检测字符串长度是否不为0
str 检测字符串是否为空
if [ $a ]
then
echo "$a : 字符串不为空"
文件测试运算符
-b file 检测文件是否是块设备文件
-c file 检测文件是否是字符设备文件
-d file 检测文件是否是目录
-f file 检测文件是否是普通文件(既不是目录也不是设备文件),
-g file 检测文件是否设置了SGID位
-k file 检测文件是否设置了粘着位(Sticky Bit)
-p file 检测文件是否是有名管道
-u file 检测文件是否设置了SUID位
-r file 检测文件是否可读
-w file 检测文件是否可写
-x file 检测文件是否可执行
-s file 检测文件是否为空(文件大小是否大于0)
-e file 检测文件(包含目录)是否存在
5、Shell echo命令
显示普通字符串
echo "It is a test"
显示转义字符
echo "\"It is a test\""
显示变量
echo "$name It is a test"
显示换行
echo -e "OK! \n" # -e 开启转义
显示不换行
echo -e "OK! \c"
显示结果定向至文件
echo "It is a test" > myfile
原样输出字符串,不进行转义或取变量(用单引号)
echo '$name\"' 输出 $name\"
显示命令执行结果
echo `date`
6、Shell printf命令
printf format-string [arguments...]
printf "%-10s %-8s %-4.2f\n" 郭靖 男 55.1234
郭靖 男 55.12
%s %c %d %f都是格式替代符
%-10s指一个宽度为10的字符(-表示左对齐,没有则表示右对齐))
不足补空格,超过会全部显示
%-4.2f 格式化为小数,.2指保留两位小数
printf转义序列
\a 警告字符,通常为ASCII的BEl字符
\b 后退
\c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效)而且,任何在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符都被忽略
1、#表示root用户登录,$表示普通用户登录
2、|符号是管道符,用于把|前的输出作为后面命令的输入
3、>表示追加并覆盖的意思
4、>>两个大于符号,表示追加
命令
1、cd命令:切换目录
cd /home 进入/home目录
cd ../返回上一级目录
cd ./当前目录
2、ls命令:产看文件及目录
ls ./ 查看当前目录所有的文件和目录
ls -a 查看所有的文件,包括隐藏文件,以.开头的文件
ls -l 查看某个文件或者目录的权限,它以显示数据的第一个字段为准,第一个字段由10个自负组成
[root@node1 ~]# ls -l monitor_log.sh
-rw-r--r-- 1 root root 91 May 7 20:21 monitor_log.sh
第一位表示文件类型,-表示文件,d表示目录;后面每三位为一组。
第一组:2-4位表示文件所有者的权限,即用户user权限,简称u
第二组:5-7位表示文件所有者所属组成员的权限,group权限,简称g
第三组:8-10位表示所有者所属组之外的用户的权限,other权限,简称o
rwx权限可以用数字来表示,分别表示为r(4)、w(2)、x(1)
3、pwd命令:显示当前所在的目录
4、mkdir:创建目录
mkdir test ,命令后接目录的名称
5、rmdir:删除空目录
6、rm:删除文件或目录
rm –rf test.txt (-r表示递归,-f表示强制)
7、cp:拷贝文件
cp old.txt /tmp/new.txt
如果拷贝目录需要加 –r参数
8、mv:重命名或移动文件或目录
mv old.txt new.txt
9、touch:创建文件
touch test.txt 如果文件存在,则表示修改当前文件时间
10、Useradd:创建用户
useradd jpc,userdel删除用户
11、Groupadd:创建组
groupadd jpc1,groupdel删除组
12、find:查找文件或目录
find /home -name "test.txt"
find 后接查找的目录,-name指定需要查找的文件名称,名称可以使用*表示所有
find /home -name “*.txt” ;查找/home目录下,所有以.txt结尾的文件或者目录
13、cat:查看文件内容
cat test.txt 可以看到test.txt内容
14、more:查看文件内容
分页查看,cat是全部查看,如果篇幅较多只能看到最后的篇幅
可以配合cat使用:
cat test.txt|more 分页显示text内容
15、echo:回显
echo ok 显示ok,输出什么打印什么
echo ok > test.txt 把ok字符覆盖test.txt的内容,>表示追加并覆盖的意思
echo ok >> test.txt 表示向test.txt文件追加OK字符,不覆盖原文件里的内容
16、chown 改变某个文件的所有者或者所属的组
chown -R test:test monitor_log.sh
vi操作
命令行模式:vi默认打开就是命令行模式
文本输入模式:命令行模式下按i进入文本输入模式,按esc进入命令模式,
末行模式:命令行模式按:进入末行模式
:wq表示保存退出
:q!不保存退出
Shell脚本
Bourne Again Shell(/bin/bash)
1、运行脚本:
作为可执行程序
需要在第一行指定解释器 #!/bin/bash
将代码保存到test.sh
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
作为解释器参数
/bin/sh test.sh
/bin/php test.php
2、Shell变量
(1)定义变量时,变量名布甲美元符号($,php语言中变量需要)
you_name="jpc"
变量名和等号之间不能有空格
首字符必须字母
中间不能有空格,可以下划线
不能使用符号
不能使用bash里的关键字(可用help命令查看保留关键字)
(2)使用变量,只用在变量名前加美元符号即可
you_name="jpc"
echo $you_name
echo ${you_name}
花括号可不写,为了帮助解释器识别变量的边界
(3)只读变量,使用readonly命令讲变量定义为只读变量
#!/bin/bash
myUrl="http://www.w3cschool.cc"
readonly myUrl
(4)删除变量,使用unset命令删除变量
unset variable_name
unset命令不能删除只读变量
(5)变量类型
局部变量:在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要时,shell脚本也可以定义环境变量
shell变量:shell变量是由shell程序设置的特殊变量,shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
(6)Shell字符串
可用单引号,双引号,也可以不用引号
单引号:
单引号里的任何字符都会原样输出,单引号字符中的变量是无效的
单引号字符串中布恩那个出现单引号(对单引号使用转义字符后也不行)
双引号:
双引号里可以有变量
双引号里可以出现转义字符
拼接字符串
you_name="jpc"
greeting="hello,"$you_name"!"
greeting_1="hello,${you_name}!"
echo $greeting $greeting_1
获取字符串长度
string="abcd"
echo ${#string} #输出4
提取字符串
string="runoob is a great site"
echo ${string:1:4} # 输出unoo
从第二个字符开始截取四个字符
查找子字符串
查找字符“i或s”的位置
string="runoob is a great company"
echo `expr index "$string" is` #输出8
`是反引号(英文输入法左上角)
(7)Shell数组
bash仅支持一维数组,没限定数组的大小
定义数组
括号表示数组,数组元素用空格隔开
数组名=(值1 值2 值3 ... 值n)
也可单独定义数组的各分量
可以不使用连续的下标,而且下标的范围没有限制
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
读取数组
#{数组名[下标]}
使用@符号可以获取数组中的所有元素
#{数组名[@]}
获取数组的长度
获取数组长度的方法与获取字符串长度的方法想通
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
(8)Shell注释
以“#”开头的行就是注释,会被解释器忽略
sh里无多行注释
3、Shell传递参数
可以在执行Shell脚本时,向脚本传递参数,脚本内获取参数的格式为$n n表示一个数字,1为执行脚本的第一个参数,2第二
$0为执行的文件名
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
如"$*"用"括起来的情况,以"$1 $2"形式输出所有参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数
如"$@"用"括起来的情况,以"$1" "$2"形式输出所有参数
$- 显示Shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态,0表示没有错误,其他任何值都表明有错误
4、Shell运算符
算数运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符
原生bash不支持简单的数学运算,通过expr来实现
两个数相加
#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为:$val"
注意:
表达式和运算符之间要有空格
完整的表达式要被``包含,反引号
算术运算符
其他类似上述加法,用反引号包含
条件表达式要放在方括号之间,并且要有空格
例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字
-eq 检测两个数是否相等,相等返回true
-ne 检测两个数是否相等,不相等返回true
-gt 检测左边的数是否大于右边的
-lt 检测左边的数是否小于右边的
-ge 检测左边的数是否大于等于右边的
-le 检测左边的数是否小于等于右边的
布尔运算符
!非运算,表达式为true返回false
-o 或运算,有一个表达式为true返回true
-a 与运算,两个表达式都为true返回true
逻辑运算符
假定变量 a 为 10,变量 b 为 20:
&& 逻辑的AND
[[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的OR
[[ $a -lt 100 || $b -gt 100 ]] 返回 true
字符串运算符
= 检测两个字符串是否相等
!= 检测两个字符串是否不相等
-z 检测字符串长度是否为0
-n 检测字符串长度是否不为0
str 检测字符串是否为空
if [ $a ]
then
echo "$a : 字符串不为空"
文件测试运算符
-b file 检测文件是否是块设备文件
-c file 检测文件是否是字符设备文件
-d file 检测文件是否是目录
-f file 检测文件是否是普通文件(既不是目录也不是设备文件),
-g file 检测文件是否设置了SGID位
-k file 检测文件是否设置了粘着位(Sticky Bit)
-p file 检测文件是否是有名管道
-u file 检测文件是否设置了SUID位
-r file 检测文件是否可读
-w file 检测文件是否可写
-x file 检测文件是否可执行
-s file 检测文件是否为空(文件大小是否大于0)
-e file 检测文件(包含目录)是否存在
5、Shell echo命令
显示普通字符串
echo "It is a test"
显示转义字符
echo "\"It is a test\""
显示变量
echo "$name It is a test"
显示换行
echo -e "OK! \n" # -e 开启转义
显示不换行
echo -e "OK! \c"
显示结果定向至文件
echo "It is a test" > myfile
原样输出字符串,不进行转义或取变量(用单引号)
echo '$name\"' 输出 $name\"
显示命令执行结果
echo `date`
6、Shell printf命令
printf format-string [arguments...]
printf "%-10s %-8s %-4.2f\n" 郭靖 男 55.1234
郭靖 男 55.12
%s %c %d %f都是格式替代符
%-10s指一个宽度为10的字符(-表示左对齐,没有则表示右对齐))
不足补空格,超过会全部显示
%-4.2f 格式化为小数,.2指保留两位小数
printf转义序列
\a 警告字符,通常为ASCII的BEl字符
\b 后退
\c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效)而且,任何在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符都被忽略