shell是包裹内核的一层壳,过滤与内核交流的信息
内核不被允许外界直接沟通
内核:调动器,分配程序的优先级
系统是多用户多操作,cpu承载多个程序,一个核一次只能运行一个程序。
常用shell:bash,kcsh,tcsh,csh,sh
脚本: 文本,是人和系统都能懂,能够以文件形式运行文件内容
shell脚本:记录在系统中的重复步骤,解释性语言,需要开启解释器
vim test.sh
#!/bin/bash 幻数:脚本执行时最先开启的程序
幻数不固定,写成什么命令就赋予脚本什么样的执行
################################
2.shell 脚本的执行
vim test.sh
#!/bin/bash
watch -n 1 date
sh test.sh 使用sh另开一个shell程序调用脚本内命令,还可以使用bash等
source test.sh 在当前shell中执行,不另外打开
. test.sh = source test.sh
以上三种不需要有执行权限
chmod +x test.sh
./test.sh 相对路径也可使用绝对路径
需要有执行权限
例:没有执行权限时,无法以路径的方式运行脚本
加上执行权限后才可以使用路径方式
###################################################
4.vim 编辑脚本的格式
vim 编辑新的 以 . sh 结尾的文件会自动添加内容
vim /etc/vimrc 在最后添加以下内容
" map <F11> ms:call WESTOS()<cr>'s
被注释的一行,不被注释的情况下作用是vim编辑文件时,按F11作为快捷键沾贴WESTOS内的内容
autocmd BufNewFile *.sh exec ":call WESTOS()"
在vim编辑一个新的以 .sh 结尾的文件时,会自动添加以下 WESTOS内的内容
function WESTOS()
call append(0,"##################################")
call append(1,"# Author: heihei #") 脚本的编写者
call append(2,"# Create_Date: ".strftime("%Y-%m-%d %H:%M")." #")
脚本的编辑日期
call append(3,"# Version: haha #") 脚本运行的版本
call append(4,"# Mail: hehe #") 脚本的邮箱
call append(5,"# Description: xixi #") 脚本的描述
call append(6,"# #")
call append(7,"# #")
call append(8,"##################################")
call append(9,"")
call append(10,"#!/bin/bash")
endfunction
只有新编辑的以 .sh 结尾的文件才会生效
例:vim 编辑之前存在的 test.sh 不会自动添加脚本的格式内容
vim 编辑 一个新的不以 .sh 结尾的文件
vim 编辑一个以 .sh 结尾的新文件
#######################################################
4.脚本的调试:
vim date.sh
date
cal
cat
执行之后会卡住
执行调试命令可以看到卡在cat命令
sh -x test.sh 进行对脚本 test.sh 进行调试 可以看到卡在哪条命令
编辑脚本需要一条命令一条命令的调试,直接编辑全部会影响排错
脚本示例:
执行 ip_show.sh 显示当前主机的ip地址
vim ip_show.sh
ifconfig | awk ' /inet\>/&&!/127.0.0.1/ { print $2 } '
^查看所有的ip ^用 awk 截取非贪婪模式下以 inet 开头 并且不为127.0.0.1 的第二列
可以实现不管当前主机几个ip都可以显示出来,并且屏蔽回环接口
执行 user_show.sh 显示能登陆系统的用户名称
vim user_show.sh
awk -F : ' /bash$/ {print $1} ' /etc/passwd
执行 host_message.sh 显示当前主机的名称、ip、能登陆系统的用户
vim host_message.sh
echo "hostname: `hostname`"
echo "ip: `ifconfig | awk ' /inet\>/&&!/127.0.0.1/ {print $2}'`"
echo "username: `awk -F : '/bash$/{print $1}' /etc/passwd`"
执行 clear_log.sh 清空日志
vim clear_log.sh
[ "$USER" = "root" ]&&{
> /var/log/message
echo -e "\033[35m success\033[0m"
}||{
echo -e "\033[31m This must run with root!!!\033[0m"
}
echo -e " \033[字号颜色 需要显示的内容 \033[0m " 可以让脚本输出带有颜色的字体