一、shell编程入门必备基础
1、vim编辑器的命令,vimrc设置
2、150个linux基础命令
3、linux中基础的系统服务crond,ssh网络服务,nfs,rsync,inotify,lnmp,sersync,nmap等
二、变量分类
1、全局变量
[[email protected] ~]# env HOSTNAME=nfs-server TERM=linux SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=172.19.5.146 49184 22 SSH_TTY=/dev/pts/1 USER=root ……
2、局部变量 只对当前shell用户生效
定义环境变量:
①export OLDBOY=1——>定义环境变量,临时生效
②如果想要全局生效,需要加入到环境变量配置文件
/etc/profile /etc/bashrc ~/.bashrc ~/.bash_profile /etc/profile.d
③unset OLDBOY——>删除环境变量
④尽量用有意义的字符串定义变量,比如大写字母的方式
⑤驼峰语法定义:首个单词字母小写,其余单词首字母大写
devPath=/server/scripts devFileList=`ls`
⑥注意单、双引号的问题,一般字符串用双引号定义
⑦引用变量时,注意金庸新著问题---将变量名用大括号包起来
echo ${week}day
3、特殊位置变量
$0 |
获取当前执行的shell脚本的文件名,包括路径 |
$n |
获取当前执行的shell脚本的第N个参数值,n=1..9,如果n大于9,就用${10} |
$# |
获取当前shell命令行中参数的总个数 |
$? |
0表示成功***** 2权限拒绝, 126找到了命令,但无法执行 |
$$ |
获取当前shell的进程号(pid) |
三、read交互式设置变量
-p 设置提示语句
-t 设置超时时间
-s 关闭回显,让输入不显示在屏幕上
小题:写个atm程序,让你输入你的银行卡账号和密码,然后在屏幕上打印你的输入结果
[[email protected] scripts]# sh atm.sh 请输入你的银行卡:18774499487766 请输入你的密码:765689 你的银行卡 18774499487766 “你的密码” 765689
四、 条件表达式
1、常用文件判断
①判断文件存在且为普通文件
[[email protected] scripts]# [ -f /etc/hosts ] && echo "表达式成立"||echo "表达式不成立" 表达式成立
②判断目录存在且为目录文件
[[email protected] scripts]# [ -d /etc ] && echo "表达式成立"||echo "表达式不成立" 表达式成立
③判断文件存在且为软链接文件
[[email protected] scripts]# [ -L /etc/rc.local ] && echo "表达式成立"||echo "表达式不成立" 表达式成立
④判断文件存在且可读
[[email protected] scripts]# [ -r /etc/hosts ] && echo "表达式成立"||echo "表达式不成立" 表达式成立
⑤判断文件存在且可执行
[[email protected] scripts]# [ -x /etc/init.d/sshd ] && echo "表达式成立"||echo "表达式不成立" 表达式成立
⑥判断文件存在且可写
[[email protected] scripts]# [ -w /etc/hosts ] && echo "表达式成立"||echo "表达式不成立" 表达式成立
2、常用字符串判断
①判断字符串长度是否为0
[[email protected] scripts]# [ -z "oldboy" ]&& echo "表达式成立"||echo "表达式不成立" 表达式不成立
②空则为0
[[email protected] scripts]# [ -z "" ]&& echo "表达式成立"||echo "表达式不成立" 表达式成立
③双引号里面有空格,空格不为0
[[email protected] scripts]# [ -z " " ]&& echo "表达式成立"||echo "表达式不成立" 表达式不成立
3、 整数判断
-eq等于 -ne不等于 -gt大于
-ge大等于 -lt小于 -le小等于
[[email protected] scripts]# [ 1 -gt 2 ] && echo "表达式成立"|| echo "表达式不成立" ——>判断1大于2 表达式不成立 [[email protected] scripts]# [ 1 -eq 1 ] && echo "表达式成立"|| echo "表达式不成立" ——>判断1等于1 表达式成立 [[email protected] scripts]# [ 1 -lt 2 ] && echo "表达式成立"|| echo "表达式不成立" ——>判断1小于2 表达式成立
五、流程控制语句
1、if语句
语法:
一、if[判断条件];then
执行的程序
elif[判断条件];then
执行的程序
else
fi
单分支:一个条件一个结果
双分支:一个条件两个结果
多分支:多个条件多个结果
用if语句实现比较两个整数的大小
[[email protected] scripts]# sh num.sh 1 2 1<2 [[email protected] scripts]# sh num.sh 1 1 1=1 [[email protected] scripts]# sh num.sh 2 1 2>1
2、case语句
语法:
case 值 in
模式1)
command
;;
模式2)
command
;;
*)
command
;;
esac
让用户通过输入水果的名字,输出到屏幕上并加颜色
给输出字体加颜色
字体颜色设置: echo -e "\033[30m 黑色字oldboy trainning \033[0m" echo -e "\033[31m 红色字oldboy trainning \033[0m" echo -e "\033[32m 绿色字oldboy trainning \033[0m" echo -e "\033[33m 黄色字oldboy trainning \033[0m" echo -e "\033[34m 蓝色字oldboy trainning \033[0m" echo -e "\033[35m 紫色字oldboy trainning \033[0m" echo -e "\033[36m 天蓝字oldboy trainning \033[0m" echo -e "\033[37m 白色字oldboy trainning \033[0m" 背景颜色: echo -e "\033[40;37m 黑底白字 welcome to old1boy\033[0m" echo -e "\033[41;37m 红底白字 welcome to old2boy\033[0m" echo -e "\033[42;37m 绿底白字 welcome to old3boy\033[0m" echo -e "\033[43;37m 黄底白字 welcome to old4boy\033[0m" echo -e "\033[44;37m 蓝底白字 welcome to old5boy\033[0m" echo -e "\033[45;37m 紫底白字 welcome to old6boy\033[0m" echo -e "\033[46;37m 天蓝白字 welcome to old7boy\033[0m" echo -e "\033[47;30m 白底黑字 welcome to old8boy\033[0m" 关闭颜色\033[0m
3、for循环语句
语法:
#!/bin/bash
for i(变量) in {1..10} in后面可以加命令`ls` `seq 10`
do
echo $i
done
通过for循环写一个开机自启动优化脚本
[[email protected] scripts]# sh chkconfig.sh [[email protected] scripts]# chkconfig|grep 3:on crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off
写一个好玩的倒计时脚本,在屏幕上输出10 09 08 07 06 05 ……
echo命令知识点小结:
echo -n 不换行 -e 支持特殊字符 \b退一格
4、while循环语句
true 为真,条件永远成立
while true
do
echo "Hello world"
sleep 1
done
5、各个条件表达语句使用场景
if(取值判断)
for(正常循环处理)语句最常用,
while(守护进程无限循环,小于1分钟的任务都可以用while循环)
case(系统服务启动脚本)