shell编程实践

1.shell基本介绍

  1. shell是一个命令解释器,主要用来接受用户的指令,进入驱动操作系统或硬件。
  2. shell存在交互和非交互。
  3. shell脚本:
  • 将系统命令堆积在一起,顺序执行(简称:系统命令堆积)
  • 特定的格式+特定的语法+系统的命令=文件(shell脚本文件)

2.shell的书写方式

  1. shell脚本名称以.sh结尾
  2. shell脚本的格式(建议首行为 #!/bin/bash、#!/usr/bin/bash)
  3. shell脚本添加一些注释
[root@manager ~]# cat .vimrc	#添加该文件自动生成申明
set nocompatible 
set history=100
filetype on
filetype plugin on
filetype indent on 
set autoread 
set mouse=c
syntax enable 
set cursorline
hi cursorline guibg=#00ff00
hi CursorColumn guibg=#00ff00
set foldenable
set foldmethod=manual
set foldcolumn=0
setlocal foldlevel=3
set foldclose=all           
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
set expandtab
set tabstop=4
set shiftwidth=4
set softtabstop=4
set smarttab
set ai  
set si 
set wrap 
set sw=4		
set wildmenu 
set ruler 
set cmdheight=1 
set lz 
set backspace=eol,start,indent 
set whichwrap+=<,>,h,l 
set magic 
set noerrorbells
set novisualbell
set showmatch 
set mat=4 
set hlsearch
set ignorecase
set encoding=utf-8
set fileencodings=utf-8
set termencoding=utf-8
set smartindent
set cin
set showmatch
set guioptions-=T
set guioptions-=m
set vb t_vb=
set laststatus=4
set pastetoggle=<F9>
set background=dark
highlight Search ctermbg=black  ctermfg=white guifg=white guibg=black
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
func SetTitle()  
    if expand("%:e") == 'sh'  
        call setline(1, "#!/bin/bash")
        call setline(2, "##############################################################")  
        call setline(3, "# File Name: ".expand("%"))
        call setline(4, "# Version: V1.0")
        call setline(5, "# Author: lemontree")
        call setline(6, "# Organization: 1829836123@163.com")
        call setline(7, "##############################################################")
    endif  
endfunc

3.shell执行方式

首行添加 #!/usr/bin/bash 的作用

  1. 不添加:
  • 默认 ./ 运行时,系统调用 bash 运行
  • 缺点:如果为其他语言脚本,则会报错
  1. 添加:
  • ./ 运行时根据首行调用解释器
  1. 直接调用解释器运行
  • python check_shell.sh
  • bash check_shell.sh

4.shell变量

  1. 变量:以一个固定的字符串表示一个不固定的值
  2. 变量的命题规范
  • 命题规范:以字母开头,由字母数字下划线组成。
  • 定义:变量名=变量值。a=123
  1. 变量的几种定义方式
  • 用户自定义变量,自己使用
[root@manager ~]# var="hello world“	#定义变量
[root@manager ~]# echo $var 	#调用变量
#使用{}的区别
[root@manager ~]# echo $var_log

[root@manager ~]# echo ${var}_log
hello world_log
#单引号与双引号的区别
[root@manager ~]# echo "$var is good"	#双引号解析$
hello world is good
[root@manager ~]# echo '$var is good'	#不会解析
$var is good
  • 系统环境变量,所有用户都可以使用
[root@manager ~]# cat check_env.sh 
#!/bin/bash 
############################################################## 
# File Name: chech_env.sh 
# Author: lemontree 
# Organization: 1829836123@qq.com ##############################################################
	
echo "用户家目录: $HOME" 
echo "当前主机名: $HOSTNAME" 
echo "当前所在目录: $PWD" 
echo "当前SSH连接: $SSH_CONNECTION"
echo "当前用户: $USER"
echo "当前用户UID: $UID"
  • 位置参数变量
[root@manager ~]# cat var_param.sh
#!/bin/bash
echo "#当前shell的脚本文件名: $0"
echo "#第1个shell脚本位置参数: $1"
echo "#第2个shell脚本位置参数: $2"
echo "#第3个shell脚本位置参数: $3"
echo "#所有传递的参数为一个整体: $*"
echo "#所有传递的参数分别为: $@"
echo "#传递的参数个数为: $#"
echo "#当前程序运行的PID为: $$"
echo "#上一个命令执行的返回结果: $?"

[root@manager ~]# sh var_param.sh 11 22 33 44
[root@manager ~]# vim creat_usr.sh
#!/bin/bash
############################################################## 
# File Name: chech_env.sh 
# Author: lemontree 
# Organization: 1829836123@qq.com ##############################################################
#判断是否为root用户
if [ $UID -ne 0 ];then
	echo "$USER 没有权限"
	exit
fi
#判断传递参数是否满足
if [ $# -ne 2 ];then
	echo "请输入 username  passwd"
	exit
fi
#添加用户
useradd $1
echo "$2" | passwd --stdin $1
  • 变量赋值方式
[root@manager ~]# vim read_1.sh
#!/bin/bash
############################################################## 
# File Name: chech_env.sh 
# Author: lemontree 
# Organization: 1829836123@qq.com ##############################################################
read -p "Login:" acc
read -s -t10 -n6 "passwd:" pw
#-s 不显示输入,-n指定字符个数,-t超时时间秒
echo "Login: $acc  passwd: $pw"
[root@manager ~]# sh read_1.sh
#模拟登陆界面
[root@manager ~]# vim read_2.sh	
#!/bin/bash
############################################################## 
# File Name: chech_env.sh 
# Author: lemontree 
# Organization: 1829836123@qq.com ##############################################################

hostnamectl | awk -F ':' '/Sytem/ {print $2}'
echo "Kernel $(uname -r) an $(uname -m)"
echo ""
read -p "$(hostname) lgoin:" acc
read -s -p "Passwd:" pw
echo ""
echo "Login: $acc  Passwd: $pw"

#备份脚本,传递两个参数,源和目标
[root@manager ~]# vim read-3.sh
############################################################## 
# File Name: chech_env.sh 
# Author: lemontree 
# Organization: 1829836123@qq.com ##############################################################
read -p "要备份的文件或目录路径是:" src
read -p "要备份到的目录是:" dest
read -p "你确定将 $src 备份到 $dest 吗? [y | n]" action
if [$action == "y"];then
	cp -rp $src $dest
	echo "备份成功"
else
	echo "备份退出"
	exit
fi

#探测主机IP地址是否存活
[root@manager ~]# vim read-4.sh
############################################################## 
# File Name: chech_env.sh 
# Author: lemontree 
# Organization: 1829836123@qq.com ##############################################################
read -p "请输入IP地址:" Ip
ping -c2 $Ip &>/dec/null
if [ $? -eq 0 ];then
	echo "$Ip存活"
else
	echo "$Ip 不存活
fi

#修改主机名的脚本
[root@manager ~]# vim read-5.sh
############################################################## 
# File Name: chech_env.sh 
# Author: lemontree 
# Organization: 1829836123@qq.com ##############################################################
Host_Name=$(hsotname)
echo "当前系统名是:$Host_Name"
read -p "请输入系统名修改为:" New_Name
read -p "确定将 $Host_Name 修改为 $New_Name 吗?[y|n]" action
if [ $action == "y" ];then
	hostnamctl set-hostname ${New_Name}
	echo "已修改"
else
	echo "未修改"
  1. 变量的替换
    | 变量 | 说明 |
    |–|--|
    | ${变量#匹配规则} | 从头开始匹配,最短删除 |
    | ${变量##匹配规则} | 从头开始匹配,最长删除 |
    | ${变量%匹配规则} | 从尾开始匹配,最短删除 |
    | ${变量%%匹配规则} | 从尾开始匹配,最长删除 |
    | ${变量/旧字符串/新字符串} | 只替换第一个旧字符串为新字符串 |
    | ${变量//旧字符串/新字符串} | 全部替换变量中旧字符串为新字符串 |
#与##	
[root@web01 ~]# url=www.sina.com.cn 
[root@web01 ~]# echo ${url} 
www.sina.com.cn 
[root@web01 ~]# echo ${url#*.}     
sina.com.cn 
[root@web01 ~]# echo ${url#*.*.} 
com.cn
[root@web01 ~]# echo ${url##*.}
cn  
[root@web01 ~]# echo ${url%.*} 
www.sina.com	
[root@web01 ~]# echo ${url%.*.*} 
www.sina	
[root@web01 ~]# echo ${url%%.*} 
www
	
# /与 //
[root@web01 ~]# echo ${url} 
www.sina.com.cn 
[root@web01 ~]# echo ${url/sina/SINA} 
www.SINA.com.cn 
[root@web01 ~]# echo ${url//c/C} 
www.sina.Com.Cn
  1. 变量的运算
    |操作符 | 含义 |
    |–|--|
    | + | 加 |
    | - | 减 |
    | * | 乘 |
    | / | 除 |
    | % | 取余 |
[root@web01 ~]# num1=10 
[root@web01 ~]# num2=20 
[root@web01 ~]# expr $num1 + $num2 
30 
[root@web01 ~]# echo $(( $num1 + $num2 )) 
30 
[root@web01 ~]# echo $[ $num1 + $num2 ] 
30 
[root@web01 ~]# echo $[ $num1 - $num2 ] 
-10 
[root@web01 ~]# echo $[ $num1 * $num2 ] 
200 
[root@web01 ~]# echo $[ $num1 / $num2 ] 
0
[root@web01 ~]# echo "This is $(date +%Y) year" 
This is 2020 year 
[root@web01 ~]# echo "This is $(( $(date +%Y) +1 )) year"
This is 2021 year

[root@web01 ~]# cat vars-2.sh #!/bin/bash 
############################################################## 
# File Name: chech_env.sh 
# Author: lemontree 
# Organization: 1829836123@qq.com ##############################################################
echo "今年已经过了 $(date +%j) days" 
echo "今年已经过了 $(( $(date +%j) /7 ))  weeks" 
echo "今年新年还剩多少周 $(( ( 365 - $(date +%j) )  /7 ))  weeks"

[root@web01 ~]# cat vars-3.sh
############################################################## 
# File Name: chech_env.sh 
# Author: lemontree 
# Organization: 1829836123@qq.com ##############################################################
read -p  "第一个数字为:" num1 
read -p  "第二个数字为:" num2
	
echo "$num1 + $num2 = $(( $num1 + $num2 ))" 
echo "$num1 - $num2 = $(( $num1 - $num2 ))" 
echo "$num1 * $num2 = $(( $num1 * $num2 ))" 
echo "$num1 / $num2 = $(( $num1 / $num2 ))

5.if

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值