【shell脚本编程入门】

shell脚本编程入门

脚本编程基础

案例

  • 快速远程登录主机
#!/bin/bash
#远程登录主机
#by zhangjinshan

read -p “请输入要登陆的主机名” name      #给出提示符
IP=`cat ip.txt | grep "${name}" | awk -F ":" '{print$2}'`
#显示主机名和ip地址,
#过滤出主机名的内容
#以":"为分隔符,输出2列内容

ssh ${IP}                #ssh服务需要安装,这里客户机用户名和服务器用户名相同,省咯了用户名       
echo "主机:${name},登录成功“

注:echo后的单引号表示强引用,单引号里面是什么内容就输出什么,而双引号是弱引用,变量的值会代替变量名输出

  • 检查一组命令所花费时间
#!/bin/bash 
#文件名: time_take.sh

start=$(date +%s)      #当前时间时间戳
command       #所检查的命令

end=$(date +%s)
different=$((end - start))
echo $different
echo ‘’Time taken to execute commands is $difference seconds.‘’

批量重命名扩展名

思考:
既然要批量替换文件名,那么肯定得用一个for循环依次遍历指定目录下的每个文件。
对于每个文件,假如该文件的名称为name.oldext,那么我们必须原始文件名中挖出name,再将它与新的文件扩展名newext拼接形成新的文件名name.newext。
依照这样的思路,就诞生了下面的脚本:

#!/bin/bash
read -p "old extension:" oldext       #给出提示符
read -p "new extension:" newext    
read -p “The directory:” dir          #dir指定文件所在目录
cd $dir

for file in $(ls $dir | grep .$oldext)
do
name=$(ls $file | cut -d. -f1)
mv $file ${name}.$newext
echo "$name.$oldext ====> $name.$newext"
done
echo "all files have been modified.“

下面对针对这个程序作简单说明:

1.变量oldext和newext分别指定旧的扩展名和新的扩展名。dir指定文件所在目录;
2.“ls dir∣grep.dir | grep .dirgrep.oldext”用来在指定目录dir中获取扩展名为旧扩展名的所有文件;
3.在循环体内先利用cut命令将文件名中“.”之前的字符串剪切出来,并赋值给name变量;接着将当前的文件名重命名为新的文件名。

变量定义规则

变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
等号两侧不能有空格。
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
变量的值如果有空格,需要使用双引号或单引号括起来。

脚本应用场景

应用场景
(1)监控linux环境变量的使用情况

(2)数据的处理,日志的切割、分析、统计等

(3)与数据库的交互,对数据库进行增删改查

(4)监控进程,自动化启停服务进程

(5)完成一些重复性的工作,创建100个新文件或者计算100个计算式等等

Shell常见解释器

解释器:一种命令解释器,主要作用是对命令进行运行和解释,将需要执行的操作传递给操作系统内核并执行

四种解释器:
#!/bin/bash(默认)
#!/bin/ksh
#!/bin/bsh
#!/bin/sh
#!”是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行

注意:shell脚本运行不一定需要解释器,有些脚本没有解释器也可以运行

Shell脚本执行方式

Shell脚本主要有两种执行方式:

a.将脚本作为可执行文件执行
$chmod a+rx filename         #文件创建默认是没有执行权限的,要给加上权限
$./filename

b.启动一个shell子进程来执行脚本(采用bash+脚本路径,文件不需执行权限)
$bash filename

两种方法的区别是:
第一种,本质是脚本需要自己执行,所以需要执行权限。
第二种,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。

Chmod权限设置

功能:改变文件的读写和执行权限。

命令格式:chmod {u|g|o|a}{+|-|=}{r|w|x} filename

u(user): 用户本人。 g(group): 同组用户。
o(oher): 其他用户。 a(all): 所有用户。

r(read)读许可,表示可拷贝该文件或目录内容。
w(write)写许可,表示可修改该文件或目录内容。
x(execute)执行许可,表示可执行该文件。

+:用于给予指定用户的许可权限。
-:用于取消指定用户的许可权限 。
=:将所许可的权限赋给文件。

Linux常用命令

  • 目录处理命令
ls :列出目录内容。
cp :复制文件或目录。
mkdir :创建目录。
rm :删除新文件或目录。
pwd :查看当前所在文件夹路径。
mv :移动或重命名文件或目录。
  • 文件操作命令
touch :如果文件不存在,新建文件。
more :分页显示文件内容。
head :显示文件前面几行。
tail :显示文件后面几行。
find :查找文件和目录。
  • 权限管理命令
chmod :修改文件权限。
chown :修改文件所有者。
chgrp :修改文件所属组。
  • 文本处理命令
cat :查看文件内容。
grep :在文件中搜索指定的模式。
sed :对文本进行替换、删除等操作
  • 进程管理与网络通信命令
ps :显示当前运行的进程。
kill :终止指定的进程。
ssh :远程登录到另一台计算机。
telnet :查看服务器指定端口是否可用。
ifconfig :查看和设置网卡配置信息。 
ping :测试网络连接。
  • 其它常用命令
man :获得帮助信息。
whatis :获得命令的简单介绍信息。
whereis :命令所在目录及帮助文档路径。
history :查看命令历史记录。
date :显示或设置系统日期和时间。
shutdown/reboot :关闭或重启系统。

read命令

语法格式:read -参数

-p:给出提示符,默认不支持”\n“换行
-s:隐藏输入的内容
-t :给出等待的时间,超出会退出read
-n:限制读取字符的个数,触发时到临界的值会自动执行

案例1
#!/bin/bash
if
    read -t 20 -s -p "Enter depth password in 20 seconds(once) > " pass1 && printf "\n" &&               #第一次输入密码
    read -t 20 -s -p "Enter depth password in 20 seconds(again)> " pass2 && printf "\n" &&               #第二次输入密码
    [ $pass1 == $pass2 ]              #判断两次输入的密码是否相等
then
    echo "Valid depth password"
else
    echo "Invalid depth password"
fi

案例2
#!/bin/bash
echo "请选择您的操作:"
echo "1. 显示当前目录内容"
echo "2. 显示系统信息"
echo "3. 退出"

read -p "请输入选项(1/2/3):" choice
case $choice in
    1)
        echo "当前目录内容:"
        ls
        ;;
    2)
        echo "系统信息:"
        uname –a   #unix name,如主机名、内核版本号
        ;;
    3)
        echo "感谢使用,再见!"
        exit 0
        ;;
    *)
        echo “无效选项,请重新运行并输入正确选项。"
        exit 1
        ;;
esac

小提示:
exit表示一个进程结束。exit(0)表示程序正常, exit(1)和exit(-1)表示程序异常退出,exit(2)表示系统找不到指定的文件

Find命令

命令介绍

Find指令将从指定目录向下递归遍历其各个子目录,将满足条件或者目录显示在终端。

基本语法
find [搜索范围] [选项]
$ find . -print   #打印文件和目录的列表
. 指定当前目录,.. 指定父目录。

选项说明
-name <查询方式> #按照指定文件名查找模式查找文件
-user<用户名> #查找用户名所有文件
-size<文件大小> #按照大小查找文件

$ find . -iname "example*" -print 
./example.txt 
./EXAMPLE.txt
时间选项

-atime、-mtime、-ctime

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值