1.脚本vim环境
在脚本中通常要显示一些脚本信息,这些信息可以通过对vim设定使其自动出现
/etc/vimrc 此文件是vim的主配置文件,文件内容全局生效 ~/.vimrc 此文件是vim子文件,在用户家目录中编辑vim的配置文件也可以控制,但是只针对当前用户生效
vim ~/.vimrc 编辑配置文件 配置信息的含义 :
set nu 显示行号 ts=2 表示Tab键相当于2个空格 et 把Tab键转换成空格 ai 表示缩进 func为函数类型标志 endfunc为函数结束标志 call表示调用 append表示添加语句(0表示第一行,添加内容用“”引起来) autocmd设定当新建以.sh或.script结尾的文件时会自动调用添加脚本首部信息的函数WESTOS() strftime表示自动识别捕捉时间并以年/月/日格式输出显示 !/bin/bash 幻数; 在脚本运行时最先执行的指令,通常都是脚本中其他指定的运行环境
1 set nu ts=2 et ai
2
3 autocmd BufNewFile *.sh,*.script call SHELLTITLE()
4 func SHELLTITLE()
5 call append(0,"#####################################")
6 call append(1,"# Author: lee")
7 call append(2,"# Version: 1.0")
8 call append(3,"# Create_Time: ".strftime("%Y/%m/%d"))
9 call append(4,"# Mail: lee@westos.org")
10 call append(5,"# Info: ")
11 call append(6,"#")
12 call append(7,"#")
13 call append(8,"#####################################")
14 call append(9,"")
15 call append(10,"#!/bin/bash")
16 endfunc
如图:
脚本练习:
1.建立一个ip_show.sh 脚本 ,使得输入网卡后可以显示出该网卡ip,并且要有空输入提示
[ -z "$1" ] && {
echo "Error : Please input interface following script !!"
exit
}
ifconfig $1 | awk '/\<inet\>/{print $2}'
效果如图:
2.建立host_messages.sh 显示当前主机的名称,ip登陆当前主机的用户 hostname: ipaddress: username:
echo "hostname: `hostname`"
echo "ipaddress: `ifconfig ens3 | awk '/\<inet\>/{print $2}'`"
echo "username: $USER"
!!!注意单引号和反单引号的区别,单引号’'是弱引用,不能引用\ ` $ !; 反单引号``是强引用,可以引用所有
3.建立clear_log.sh 执行脚本可以清空日志
[ "$USER" != "root" ] && {
echo "Please run $0 with root !!!"
exit
}
[ ! -e "/var/log/messages" ] && {
echo "No logfile here !!!"
exit
}
> /var/log/messages && {
echo logfile has been cleared !!!
exit
}
2.shell脚本中环境的定义方法
环境级别 export a=1 在环境关闭后变量会消失 用户级别 vim ~/.bash_profile 用户环境变量配置文件 export a=1 切换用户后失效 系统级别 vim /etc/profile 主配置文件 export a=2 vim /etc/profile.d/westos.sh 子配置文件 export b=3 此变量设定后系统中的所有用户都可以使用
当在shell中指令export a=1指定的变量值,脚本中并没有办法识别,因为两者打开的不是同一个shell 因此可以在变量配置文件中编辑需要的变量 source ~/.bash_profile 生效当前的更改信息
vim ~/.bash_profile 用户环境变量配置文件 用户环境变量配置文件只针对被设定的用户生效,切换用户后变量失效,因为切换用户之后开启shell时读取的时自己家目录的.bash_profile
vim /etc/profile 系统级环境变量配置文件(一般不再此配置文件编辑信息)
vim /etc/profile.d/westos.sh 系统级环境变量自定义子配置文件(名字自定义,本来不存在) source /etc/profile.d/westos.sh 文件生效,在子配置文件中设置变量后系统中的俄所有用户都可以使用
3.shell脚本中的转译字符
转译单个字符: \
批量转译字符:'' ""
'' 单引号是弱引用,不能引用\ ` $ !
`` 反单引号是强引用,可以引用所有
4.脚本中变量的数组
a=(1 2 3 4 5) echo ${a[0]} 显示第一个元素 echo ${a[-1]} 显示倒数第一个元素 echo ${a[@]:0:3} 从第1个元素开始,一共显示3个元素 echo ${a[@]:2:3} 从第2个元素开始,显示3个元素 echo ${#a[@]} 显示所有元素 echo ${#a[*]} 显示所有元素 unset a 删除数组 unset a[0] 删除指定元素
5.系统中命令的别名设定
alias xie=‘vim’ # 临时设定 切换关闭shell失效
vim ~/.bashrc #用户级配置文件 alias xie=‘vim’ source ~/.bashrc #文件生效 只针对当前用户生效 切换用户后失效
vim /etc/bashrc #系统级 alias xie=‘vim’ source ~/.bashrc #文件生效 针对系统所有用户生效
删除别名: 删除系统配置文件内容之后 unalias xie #删除当前环境中的alias
6.脚本中的传参
非交互模式: sh /mnt/test.sh westos linux redhat
$0 is /mnt/test.sh #脚本本身 $1 is westos #脚本后所输入的第一串字符 $2 is linux #第二串字符 $3 is redhat #第三串字符 $* is westos linux redhat #脚本后所输入的所有字符“westos linux redhat” $@ is westos linux redhat #脚本后所输入的所有字符“westos” “linux” “redhat” $# is 3 #所输入的字符串的个数
交互模式:
read -p 进入交互模式; WORD表示变量
#!/bin/bash read -p “Pleas input word:” WORD echo $WORD
效果如图:
-s 表示隐藏录入的WORD
#!/bin/bash read -p “Pleas input word:” -s WORD echo $WORD
输入时会有隐藏效果,如图:
脚本练习:
写一个可以创建新用户的脚本,并且当用户已经存在时提醒你,不存在时会让你输入新用户的密码
11
12 [ -z $1 ] && {
13 echo "Please input username: !!"
14 exit
15 }
16 id $1 &> /dev/null && {
17 echo "$1 is exit !!"
18 }||{
19 useradd $1 &> /dev/null
20 read -p "Please input user's password: " -s PASS
21 echo " "
22 echo $PASS |passwd --stdin $1 &> /dev/null && {
23 echo "user is created success !!"
24 }
25 }
效果如图:
7.脚本中的循环函数
ECHO()
{
[ "$WORD" = "exit" -o "$WORD" = "EXIT" ] && {
echo bye
exit
}
read -p "Please input word:" WORD
echo $WORD
ECHO
}
ECHO
函数可以使脚本动作循环执行,效果如图:
脚本练习:
写一个可以检测文件类型的循环脚本,当文件不存在时显示文件不存在,存在时输出文件类型。当输入exit时,输出bye 退出脚本
FILE()
{
[ $1 "$FILENAME" ] && {
echo $FILENAME is "$2"
echo ""
check
}
}
check()
{
read -p "Please input filename :" FILENAME
[ "$FILENAME" = "exit" ] && {
echo bye
exit
}
FILE "! -e" "not find"
FILE -L "link file"
FILE -f "common file"
FILE -d "directory"
FILE -S "socket"
FILE -b "block file"
FILE -c "cahr file"
check
}
check
效果如图:
脚本练习2: 写一个循环创建用户的脚本,如果用户存在,输出信息为用户已存在,如果不存在之间新建立用户,并让输入密码,密码输入时被隐藏,此时显示用户已经创建。并一直提示输入用户名创建下一个用户,直到主动退出
Create_user()
{
read -p "Please input username : " USER
echo ""
[ "$USER" = "exit" ] && {
echo bye
exit
}
id $USER &> /dev/null && {
echo "$USER is exit !!"
Create_user
}||{
useradd $USER
read -p "Please input password :" -s PASS
echo ""
echo $PASS |passwd --stdin $USER &> /dev/null && {
echo ""
echo $USER is created !!
}
}
Create_user
}
create_user
效果如图:
|