一,什么是Shell脚本?
在linux下,我们已经能够熟练的在终端中输入命令来完成一些常用的操作,但是我们都是一条一
条输入命令。这样会很麻烦,那么有没有一种方式可以将很多条命令放到一个文件里面,然后直接运行这个文件即可?肯定有,这个就是 shell 脚本!
Shell 脚本类似 windows 的批处理文件,shell 脚本就是将连续执行的命令写成一个文件。shell 脚本提供数组、循环、条件判断的等功能。shell 脚本一般是 Linux 运维或者系统管理员要掌握的,作为嵌入式开发人员,只需要掌握 shell 脚本最基础的部分即可。
Shell 脚本的语法规则,就像 C 语言一样,将很多语句按照一定的规则组合起来形成一个程序。但是这里要强调的是,C 语言编写出来的程序是需要经过编译器编译,生成另一个称为 ELF 格式的文件之后才能执行的,但是 Shell 脚本是不需要编译而可以直接执行的,这种脚本语言称为解释型语言(例如Python,JavaScript等)。
二、shell 脚本写法
shell 脚本是个纯文本文件,命令从上而下,一行一行的开始执行。shell 脚本扩展名为.sh。
shell 脚本第一行一定要为:
#!/bin/bash
告诉系统当前这个脚本文件中的所有命令(语句)都使用 /bin/bash 工具来进行解析(指定命令
解析器)
在编辑器中输入代码,会发现第一行是加粗的。之所以写为`#!`才加粗,是因为`#!`是源自于unix的解释符,是实打实的源于Unix的标准。当执行脚本时,会把#!后作为执行脚本的命令。若写为`#!/bin/bash -l`,则使用登录式bash执行该脚本。
三,第一个shell 脚本
#!/bin/bash
echo "Hello Even" #echo 相当于c 语言中的printf 打印输出
Shell脚本中使用#来进行注释。
四,执行.Sh脚本文件
输入:
ls my.sh -l
查看文件是否有可执行权限
可以看到文件没有‘X’执行权限,输入
chmod 777 my.sh
可以发现所有组对该文件被赋予了读写执行权限。
rwx分别代表二进制第2,1,0位。全开则为7,全关则为0;只可读->3'b100 = 4,以此类推。
输入
./my.sh
则脚本被执行。
五,常用命令
键盘输入参数:read
#!/bin/bash
read str
echo "Input string:" $str
Shell 脚本是一种弱类型语言,在脚本当中使用变量不需要也无法指定变量的“类型”。缺省状态
下,Shell 脚本的变量都是字符串,即一连串的单词列表。
要引用变量,语法为”$变量名“
read -p "read two arg" age height
echo "arg1 age=$age,height=$height"
先打印提示内容,再读取多个变量
六,数值计算
Shell只能进行整数计算。语句是$((运算语句))
read -p "input num1,num2" num1 num2
total=$(($num1+$num2)) #直接声明了一个叫total的变量,注意赋值语句不能有空格,和C 语言不一样
echo "$num1 + $num2 = $total"
七,test命令
test 命令用于查看文件是否存在、权限等信息,可以进行数值,字符,文件三方面的测试。
用test检测文件是否存在?
read -p "input a file name" filename
test -e $filename && echo "$filename exist" || echo "$filename not exist"
&&和||命令:
cmd1 && cmd2 当 cmd1 执行完并且正确,那么 cmd2 开始执行,如果 cmd1 执行完
毕错误,那么 cmd2 不执行。
cmd1 || cmd2 当 cmd1 执行完毕并正确,那么 cmd2 不执行,反之 cmd2 执行。
用test比较两个字符串是否一样?
read -p "input two string:" str1 str2
test $str1 == $str2 && echo "str1 = str2" || echo "str1!= str2"
八,中括号[]判断符
[判断语句] 和tset指令效果相同;[]只能处理== 和 !=两种运算,且变量需要加双引号
read -p "input two string:" str1 str2
[ "$str1" == "$str2" ] echo "str1 = str2" || echo "str1!= str2" #注意[ ]中间要有空格
九,默认变量
$0~$n,表示 shell 脚本的参数,包括 shell 脚本命令本身,shlle 脚本命令本身为$0
$#:#表示最后一个参数的标号。
$@:表$1、$2、$3......
#!/bin/bash
echo "file name" $0 #shell脚本的名字
echo "total param num:" $# #有多少个参数
echo "whole param:" $@ #整个参数的内容
echo "first param" $1 #第一个参数
echo "second param" $2 #第二个参数
运行命令:
./my.sh a b
Comments | NOTHING
Warning: Undefined variable $return_smiles in /www/wwwroot/ogisosetsuna/wp-content/themes/Sakura/functions.php on line 1096