Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
SHELL是用户与 Linux沟通的桥梁
使用SHELL脚本可以完成更复杂的系统管理工作
windows系统:dos系统(使用dos系统可以编写批处理命令)
Linux系统: Bourne Again Shell,简称Bash
1.创建以.sh为扩展名的文件
2.编辑脚本文件
编辑脚本要注意的内容:
3.增加脚本文件执行权限
chmod +x 脚本名字,所有用户均对该脚本有执行权限
chmod 755 脚本名字,用户所有者对该脚本具有完全的权限,其他人对改脚本具有执行权限
4.运行脚本文件
进入脚本文件目录:cd /home/script
方式一 ./ 脚本名 :./hello.sh
方式二 /bin/sh 脚本名
定义变量时,变量名不加$,变量名和等号之间不能有空格,如:
your_name="runoob.com"
变量名命名规则:
myname='galley' #单引号,字符串类型,不解析任何字符
courses="abcdefg" #双引号,内部会解析$和反斜杠特殊字符
sum=100;price=1.2544 #如果是数字,可以不加引号
now_date=`date` #反引号执行系统命令
使用一个定义过的变量,只要在变量名前面加 $ 即可,如:
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
一般指在操作系统中用来指定操作系统运行环境的一些参数,如PATH、PWD、USER、当前使用的SHELL名称等。
常见的环境变量:
查看环境变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
预定义变量和环境变量相类似,也是在Shell一开始时就定义了的变量。所不同的是,用户只能根据Shell的定义来使用这些变量,而不能重定义它。所有预定义变量都是由$符和另一个符号组成的,常用的Shellf预定义变量有:
如:
cat predefine_var.sh# !/bin/sh
#!/bin/sh
echo "这个程序的名字:$0"
echo "参数的数量:$#"
echo "所有的参数:$*"
echo "当前进程号:$$”
echo string
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 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 命令读取标准输入设备的下一行,标准输入中的新一行到换行符前的所有字符会被读取,并赋值给对应的变量。可以结合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<
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