shell基础语句
shell变量
可以直接为一个变量赋值
如:a=123
b=“start” (单引号、双引号、不用都可以)
使用时 echo ${a}
echo b也可把变量更改为只读readonly变量名删除变量:unset变量名局部变量:局部变量在脚本或者命令中定义,仅在当前shell中有效环境变量:所有的程序,包括shell启动的程序拼接字符串(可以用双引号,也可以用单引号)a=\”abc\”b=\”www\”c=\”wwww,\”{b}也可把变量更改为只读 readonly 变量名删除变量: unset 变量名局部变量:局部变量在脚本或者命令中定义,仅在当前shell中有效环境变量: 所有的程序,包括shell启动的程序拼接字符串 (可以用双引号,也可以用单引号)a=\”abc\”b=\”www\”c=\”wwww,\”b也可把变量更改为只读readonly变量名删除变量:unset变量名局部变量:局部变量在脚本或者命令中定义,仅在当前shell中有效环境变量:所有的程序,包括shell启动的程序拼接字符串(可以用双引号,也可以用单引号)a=\”abc\”b=\”www\”c=\”wwww,\”{a}\”\”
获取字符串长度
echo ${#a}
echo ${c:0:4} 取c字符串的0到4的字符
或者
echo $c |awk -F ’ 分隔的字符串’ ‘{print $1}’ $i 代表分隔后的第几个字符串。
shell传递参数
向脚本传递参数,脚本内获取参数的格式为:$n n代表一个数字,分别代表第几个参数
创建的.sh文件 下面是其内容
#!/bin/bashecho \"第一个参数:$1\"echo \"第二个参数:$2\"echo \"传递的脚本参数个数:$#\"echo \"显示所有向脚本传递的参数:$*\"echo \"脚本运行的当前进程ID号\"echo \"显示最后命令的退出状态:$?\"
运行该.sh文件 并传入参数
#为脚本设置可执行权限chmod +x 文件名.sh#执行脚本./文件名.sh 1 2
shell基本运算符
包括算术运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符
算术运算
- 、- 、*、/ 、%、赋值= 、 相等== 、不相等!=
a=1b=2#表达式和运算符之间要有空格 ==可以判断两个数字是否相等echo `expr $a + $b`echo $[ $a+$b ]echo $(( $a + $b ))if [ $a==$b ]thenecho \"a等于b\"elseecho \"a不等于b\"
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
-eq 相等
-ne 不相等
-gt 左边的数大于右边的数 -ge 大于等于
-lt 左边的数小于右边的数 -le 小于等于
if [ $a -eq $b ]thenecho \"$a -eq $b : a 等于 b\"elseecho \"$a -eq $b: a 不等于 b\"fi字符串运算符= 、!= 检测两个字符串是否相等-z 检测字符串的长度是否为0-n 检测字符串的长度是否不为0$ 检测字符串是否为空```powershella=asdb=\"www\"if [ $a = $b ]thenecho \"$a 和 $b 相等\"elseecho \"$a 和 $b 不相等\"fiif [ -z $a ]thenecho \"长度为0\"elseecho \"长度不为0\"fiif [ $a ]thenecho \"$a : 字符串不为空\"elseecho \"$a : 字符串为空\"fi
文件测试运算符
-d 检测是否是目录 是 返回true
-r 检测文件是否可读 是返回true
-w 检测文件是否可写 是返回true
-x 检测文件是否可执行 是返回true
-e 检测文件是否存在 是返回true
file=\"/var/www/test.sh\"if [ -r $file ]thenecho \"文件可读\"elseecho \"文件不可读\"fi
echo命令
1、echo命令用于输出字符串
echo wwwecho \"wwww\"#转译字符echo \"\\\"wwww\"\\\"
2、显示变量
#!/bin/bash#输入read name#输出scho \"$name \"
3、显示换行
#-e 开启转义echo -e \"ok! \\n\"
4、显示命令自行结果
#显示当前日期echo `date`
printf命令
printf也是输出命令
#!/bin/bashprintf \"%-10s %-8s %-4s\\n\" 姓名 性别 体重kgprintf \"%-10s %-8s %-4.2f\\n\" 郭靖 男 66.1234printf \"%-10s %-8s %-4.2f\\n\" 杨过 男 48.6543printf \"%-10s %-8s %-4.2f\\n\" 郭芙 女 47.9876
其中%s %c %d %f都是格式替代符
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐)
%-4.2f 指格式化为小数,其中.2指保留2位小数。
test命令
用于检测某个条件是否成立
1、数值测试
#!/bin/bashnum1=100num2=200if test $[num1] -eq $[num2]thenecho \"相等\"elseecho \"不相等\"fi
字符串测试
#!/bin/basha=wwb=ssif test $a = $bthenecho \'相等!\'elseecho \'不相等!\'fi
shell 流程控制
shell的流程控制不可为空
条件语句
#if语句
if
then
…
fi
#if -else 语句
if
then
…
else
…
fi
#if -else -else 语句
if
then
…
elif
then
…
else
then
…
fi
循环语句
break 结束循环
continue 跳出当前循环
#for 语句
for (( 变量值; 循环条件; 每次循环的变化量))
do
…
done
增强for
for a in param1 param2 。。。
do
…
done
#while循环
a=1
while [ $a -le 7]
do
…
let “a++”
done
#case判断
case 变量:
变量1)
…
;;
变量2)
…
;;
*)
…
;;
esac
a=10b=20if [ $a == $b ]thenecho \"a 等于 b\"elif [ $a -gt $b ]thenecho \"a 大于 b\"elif [ $a -lt $b ]thenecho \"a 小于 b\"elseecho \"没有符合的条件\"fi
shell函数
用户可以自定义函数
#!/bin/bashdemofun(){echo \"第一个sell函数小样\"return $((1 + 1))}#在.sh文件中调用demofun#函数的返回值在调用该函数后通过$? 来获得echo $?
在shell中调用函数时可以向其传递参数
#!/bin/bashcd /opt/tomcat8start(){echo \"启动tomcat应用\"./bin/startup.sh}stop(){echo \"关闭tomcat应用\"./bin/shutdown.sh}restart(){stopstart}action=$1control(){case $action instart)start;;stop)stop;;restart)restart;;*)echo \"正常的参数应该是start|stop|restart\"echo \"请重新正确执行脚本\"esac}control $1
定时器
1、crontab是什么
定时任务软件种类
crontab 需要启动一个服务crond才行,crond服务通过crontab命令实现
其中crond 运行linux后,开机自启动crond任务,crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程。系统会每分钟检查是否有要执行的任务工作(循环检测)默认系统中可以登陆的用户,都可以使用crontab定义计划任务。不过,可以通过/etc/cron.allow文件限制权限。
所有用户crontab文件存放的目录,以用户名命名
crontab文件的含义:
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
可以使用crontab [-u user] -e 进入crontab 文件中 不写-u user 则是默认是root用户 写了是其他用户
在这里插入代码片
如* * * * * cat /tmp/test.txt >> /tmp/test01.txt 把 test.txt中的文件里的内容每分钟更新一次,追加到test01中
此时就具有一个定时器
关闭定时器: 可以把文件里的内容删掉 也可以删除掉这个crond进程 这些情况下,在启动需手动启动,或者关闭虚拟机在打开
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置