Shell脚本

1.SHELL简介

1.1什么是shell

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

SHELL是用户与 Linux沟通的桥梁。

使用SHELL脚本可以完成更复杂的系统管理工作。

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

1.2当前主流操作系统的SHELL

windows系统:dos系统(使用dos系统可以编写批处理命令)

Linux系统: 

Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

Linux 的 Shell 种类众多,常见的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)

1.3编写shell脚本的步骤

1.创建以.sh为扩展名的文件

2.编辑脚本文件

编辑脚本要注意的内容:

  • 第一行以“#!”开头,声明所使用的shell的全路径
  • 注释,以“#”开头

3.增加脚本文件执行权限

chmod +x 脚本名字,所有用户均对该脚本有执行权限

chmod 755 脚本名字,用户所有者对该脚本具有完全的权限,其他人对改脚本具有执行权限

4.运行脚本文件

  进入脚本文件目录:cd /home/script

  方式一  ./ 脚本名   :./hello.sh

  方式二  /bin/sh 脚本名

2.SHELL变量

2.1定义变量

定义变量时,变量名不加$,变量名和等号之间不能有空格,如:

your_name="runoob.com"

变量名命名规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)

myname='galley'   #单引号,字符串类型,不解析任何字符

courses="abcdefg"  #双引号,内部会解析$和反斜杠特殊字符

sum=100;price=1.2544  #如果是数字,可以不加引号

now_date=`date`   #反引号执行系统命令

2.2使用变量

使用一个定义过的变量,只要在变量名前面加 $ 即可,如:

your_name="qinjx"
echo $your_name
echo ${your_name}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done
ubuntu@VM-0-12-ubuntu:~$ testvar=100
ubuntu@VM-0-12-ubuntu:~$ echo 'the value is $testvar'
the value is $testvar
ubuntu@VM-0-12-ubuntu:~$ echo "the value is $testvar"
the value is 100
ubuntu@VM-0-12-ubuntu:~$ now_date=`date`
ubuntu@VM-0-12-ubuntu:~$ echo $now_date
Mon Apr 19 18:02:17 CST 2021

2.3环境变量、局部变量与预定义变量 

环境变量

一般指在操作系统中用来指定操作系统运行环境的一些参数,如PATH、PWD、USER、当前使用的SHELL名称等。

常见的环境变量:

  • PATH:系统路径
  • HOME:当前用户家目录
  • HISTSIZE:保存历史命令记录的条数
  • LOGNAME:当前用户登录名
  • HOATNAME:主机名称
  • SHELL:当前用户用的是哪种shell
  • LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量
  • MAIL:当前用户的邮件存放目录

查看环境变量

  • env:显示所有的环境变量
  • echo $PATH:显示某一个环境变量的值

局部变量

局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

预定义变量 

预定义变量和环境变量相类似,也是在Shell一开始时就定义了的变量。所不同的是,用户只能根据Shell的定义来使用这些变量,而不能重定义它。所有预定义变量都是由$符和另一个符号组成的,常用的Shellf预定义变量有:

  • $#            位置参数的数量
  • $*             所有位置参数的内容
  • $?            命令执行后返回的状态  #0表示成功,非O表示失败
  • $$            当前进程的进程号
  • $!             后台运行的最后一个进程     #很少用,了解即可
  • $0            当前执行的进程名

如:

cat predefine_var.sh# !/bin/sh
#!/bin/sh
echo "这个程序的名字:$0"
echo "参数的数量:$#"
echo "所有的参数:$*"
echo "当前进程号:$$”

2.4脚本的输入和输出

echo输出

echo string
  • -e :识别输出内容里的转义序列
  • -n :忽略结尾的换行
echo "It is a test"  #显示普通字符串,结果:
echo "\"It is a test\""  #显示转义字符,结果:"It is a test"
read name 
echo "$name It is a test" #显示变量
echo -e "OK! \n" # -e 开启转义
echo "It is a test"   #换行显示
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"  #显示不换行,结果:OK! It is a test
echo "It is a test" > myfile  #显示结果定向至文件
echo '$name\"' #原样输出字符串,不进行转义或取变量(用单引号),结果:$name\"
echo `date` #显示命令执行结果

printf输出

printf  format-string  [arguments...]
  • format-string: 为格式控制字符串
  • arguments: 为参数列表

①默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n;

printf的转义序列:

序列说明
\a警告字符,通常为ASCII的BEL字符
\b后退
\c抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f换页(formfeed)
\n换行
\r回车(Carriage return)
\t水平制表符
\v垂直制表符
\\一个字面上的反斜杠字符
\ddd表示1到3位数八进制值的字符。仅在格式字符串中有效
\0ddd表示1到3位的八进制值字符

②printf支持格式化输出

%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。

%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

%-4.2f 指格式化为小数,其中 .2 指保留2位小数。

举例:

ubuntu@VM-0-12-ubuntu:~$ vim test.sh

#!/bin/bash
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 58.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
~                                                

结果:

 

read输入

read 命令读取标准输入设备的下一行,标准输入中的新一行到换行符前的所有字符会被读取,并赋值给对应的变量。可以结合echo一起实现读取并输出的功能。

ubuntu@VM-0-12-ubuntu:~$ echo "please input your ipaddress"
please input your ipaddress
ubuntu@VM-0-12-ubuntu:~$ read ipaddr
192.168.1.1
ubuntu@VM-0-12-ubuntu:~$ echo "my ip address is $ipaddr"
my ip address is 192.168.1.1

<<按行输入

“<<”可以被认为是一种重定向符,重定向脚本文件中的一行作为到一个命令的输人。

操作符<<被放在输入重定向的命令之后,紧跟在<<的各行作为命令的输入,输入的结尾通过文件结束符(ctrl+D)表示,也可以自己定义定界符,定界符后的单词作为输入各行结束的定界符。

注意结束时的定界符一定要顶格写。

例如:自动连接ftp服务器来下载数据

#!/bin/sh
#演练用"<<"按行输入来上传下载文件
ftpserver=192.168.1.100
rq= `date +%Y%m%d
cd /home/liu/mydocs
ftp -i -n<<!
open $ftpserver
user oracle post
cd emsI
bin
get $rq.dat
bye
!

3.SHELL操作

3.1运算操作

1.let整数运算

let 命令让BASH shell执行算数值的操作,使用let,可以比较两个值或执行加减乘除等操作,这种操作经常用于shell程序中的控制流程结构或执行需要的运算,注意let命令只能执行整数的相关运算,运算结果也只能保存整数。使用方法如下:

let 变量名 = 变量1 运算符 变量2

常见的算数操作分类:

  • 加法:+
  • 减法:-
  • 乘法:*
  • 除法:/
  • 取余数:%

注意,和c语言类似,let i=$i+1也可以写成let i++,从而简化书写。

i=10
j=20
k=3
let r1=$i+$j+$k
let r2=$j-$i-$k
let r3=$i*$j*$k
let r4=$j*$k/$i
#输出运算结果
echo "i+j+k=$r1"
echo "j-i-k=$r2"
echo "i*j*k=$r3"
echo "j*k/i=$r4"

expr

3.2比较操作

4.Xshell工具

XShell是Windows下一款功能非常强大的安全终端模拟软件,支持Telnet、Rlogin、SSH、SFTP、Serial 等协议,可以访问远端不同系统下的服务器,非常方便的对linux主机进行远程管理。

Xshell的快捷键

tab补全:自动补全命令或文件名,未输入状态下连按两次 Tab 列出所有可用命令

up 方向键上(可以调出输入历史执行记录,快速执行命令)

down 方向键下(配合 up 选择历史执行记录)

Home 移动光标到本行开头,End 移动光标到本行结尾

PgUp 向上翻页,PaDN 向下翻页

Ctrl + C 终止当前程序

Ctrl + L 清屏 = clear命令

Ctrl + Insert复制,Shift + Insert粘贴

ctrl + shift + = 放⼤终端窗⼝的字体显示
ctrl + - 缩⼩终端窗⼝的字体显示

### 回答1: Windows Shell脚本是一种在Windows操作系统中使用的脚本语言,它可以通过命令行或批处理文件来执行一系列命令和操作。它可以用于自动化任务、管理系统、配置网络等方面,是Windows系统管理员必备的技能之一。常用的Windows Shell脚本语言包括PowerShell、VBScript和JScript等。 ### 回答2: Windows shell脚本是一种命令行脚本语言,可用于在Windows操作系统上执行各种任务并自动化常见任务。在Windows中,命令行解释器被称为命令提示符(cmd)或Windows PowerShell。不像一些其他编程语言,shell脚本并不需要编译器或IDE。它们可以直接在命令行解释器中编写和执行。 一个Windows shell脚本是一系列的命令和控制逻辑,简化了特定任务的调用和组合。这种脚本可以完成很多操作,包括文件和目录处理、程序安装和卸载、系统配置等等。它们可以用于自动化常见的操作,例如备份或清理任务,管理用户权限或更新系统设置。此外,shell脚本还可以与其他应用程序以及Windows任务计划器一起使用,允许您使用Windows计划执行任务。 在Windows中,有两种类型的shell脚本:BAT文件和PowerShell脚本。BAT文件使用的是Windows命令行解释器(cmd),而PowerShell脚本使用的是PowerShell解释器。 BAT文件非常适合用于简单的、非交互式的Windows命令和批处理脚本。由于BAT文件易于编写和使用,且包含任务自动化,因此非常适合初学者。 PowerShell脚本是一种更强大的Shell脚本语言,由于其面向对象的编程模式和先进的功能,成为企业级交互式自动化的大力工具。它集成了.NET框架,并采用.NET类和功能,支持调用远程计算机上的命令和程序,可以处理Json、XML、CSV等常用数据类型,使用上更加高效且复杂度高。 总之,Shell脚本是一个强大的工具,可帮助管理和简化Windows操作系统上的各种任务。对于初学者,BAT文件是一个很好的起点;而对于更高级的用户,PowerShell脚本是一个更强大的工具,可以帮助管理和自动化更复杂的任务。无论是BAT文件还是PowerShell脚本Shell脚本都是 Windows 系统管理器的必备工具。 ### 回答3: Windows Shell脚本是一种用于管理Windows操作系统的脚本语言。脚本是一些编写好的命令,可以按照一定的顺序运行,自动完成某些任务。Shell脚本是一种文本文件,其中包含了一系列用于控制操作系统行为的命令和参数。Windows Shell脚本通常是使用批处理文件(.bat)或PowerShell脚本(.ps1)的形式实现的。 Windows Shell脚本可以执行各种任务,如自动化的系统更新、备份、网络连接、用户管理等。脚本可以让用户更加高效地管理系统,减少手动操作的工作量,避免人为错误。另外,脚本还可以在系统启动、定期计划、特定用户登录等条件下自动运行,极大地提高了系统管理的效率。 在编写Windows Shell脚本之前,需要了解一些基本概念和语法规则。例如,控制语句、循环语句、变量、函数、管道等。此外,需要根据特定的任务选择合适的工具和命令,例如ping、netstat、ipconfig等网络工具,xcopy、robocopy等文件工具,sc、reg等系统工具等。 因为Windows Shell脚本的语法比较简洁,学习和编写起来比较容易,而且可以大大提高管理效率,所以在Windows系统的管理和维护中广泛应用。同时,还可以通过组合和扩展脚本编写更加复杂和高级的系统管理功能。因此,对于Windows系统管理员而言,掌握Windows Shell脚本技术非常有利于提高工作效率和实现自动化管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值