Shell脚本
Shell就是一个命令行解释器,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive)。
Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一 个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,包括循环和分支。但Shell脚本是解释执行的,不需 要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一 行敲到Shell提示符下执行。作为程序设计语言,它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。
shell执行脚本是一门解释性语言、批量化处理语言,大大的节省了工作成本
shell脚本第一行必须以 #!开头,它表示该脚本使用后面的解释器解释执行变量
如:#! /bin/bash
1.1定义变量
myName=”小白”
String myName=”小白”
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。 同时,变量名的命名须遵循如下规则:
? 首个字符必须为字母(a-z,A-Z)。
? 中间不能有空格,可以使用下划线(_)。
? 不能使用标点符号。
使用变量:$变量名 为了区分,我们可以使用${变量名}
1.2删除变量
使用 unset 命令可以删除变量。语法:
unset variable_name
变量被删除后不能再次使用。
实例:
#!/bin/bash
myUrl="http://www.baidu.com"
unset myUrl
echo $myUrl
2.Shell 字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号
str=‘this is a string‘ 原样输出
单引号字符串的限制:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号
your_name=‘qinjx‘
str="Hello, I know your are \"$your_name\"!" 转移符
双引号的优点:
双引号里可以有变量
双引号里可以出现转义字符
3.运算符
下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
运算符 |
说明 |
举例 |
+ |
加法 |
`expr $a + $b` 结果为 30。,可以是数值型字符串 |
- |
减法 |
`expr $a - $b` 结果为 -10。 |
* |
乘法 |
`expr $a \* $b` 结果为 200。 |
/ |
除法 |
`expr $b / $a` 结果为 2。 |
% |
取余 |
`expr $b % $a` 结果为 0。 |
= |
赋值 |
a=$b 将把变量 b 的值赋给 a。 |
== |
相等。用于比较两个数字,相同则返回 true。 |
[ $a == $b ] 返回 false。 |
!= |
不相等。用于比较两个数字,不相同则返回 true。 |
[ $a != $b ] 返回 true。 |
-gt |
相当于> |
[ $a -gt $b ] 返回 false |
-lt |
相当于小于 |
[ $a -lt $b ] 返回 true |
! |
非 |
[ !true ] 返回false |
-o |
或 or |
[ true -o false ] 返回true |
-a |
与 and |
[ true -a false ] 返回false |
-ge |
大于等于 |
|
-le |
小于等于 |
注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
运算符除了使用expr还可以通过这种方式
#!bin/bash
a=10
b=20
echo $((($a+$b)*$a))
#!/bin/bash
a=10
b=20
c=$(($a+$b))
echo $c
((d=$a+$b))
echo $d
f=`expr $a + $b` (反引号)
echo $f
4.for循环
do和done之间的命令称为循环体
举例:
1.第一种
#!bin/bash
for i in {1..10} 1到10
do
echo haha
done
2.第二种
for file in `ls /etc`; do
echo $file
done
3.第三种
#!bin/bash
for i in $(ls /test)
do
echo $i
done
4.第四种
#!bin/bash
for((i=0;i<20;i++))
do
echo $i
done
5.自增长
1.第一种
for i in {1..10}
do
echo $i
let "i+=1"
Done
2.第二种
#!/bin/bash
for i in {1..10}
do
echo $i
((i++))
done
6.while循环
举例:
#!/bin/bash
sum=1
i=0
while(( i <= 2 ))
do
let "sum*=10"
let "i+=1"
done
echo "sum=$sum"
6.read 键盘录入
scanner
read命令接收标准输入(键盘)的输入,或其他文件描述符的输入。得到输入后,read命令将数据放入一个标准变量中。
1.读取键盘输入
#! /bin/bash
read -p 请输入第一个数字: first
read -p 请输入第二个数字: second
echo $(($first+$second))
3.读取文件里的内容
while read line
do
arr[$i]=$line
let i+=1
done < /test/a.txt
3.读取EOF之间的内容 远程登录会用到
while read line
do
echo $line
done << EOF
hehe
haha
EOF
7.数组
定义数组 list
方式1:arr=()
方式2: arr=(value1 value2 value3) (这种方式带值)
注意:往数组里添加值,数组的长度自动增长
获取数组的长度:${#arr[*]}
遍历数组
#!/bin/bash
arr=(value value1 value2)
arr[0]=arr[1]=2
arr[2]=3
arr[3]=4
for i in ${arr[*]}; do
echo $i
done
8.条件语句
1.if else
#!/bin/bash
a=1
b=2
if [ $a -gt $b ]
then
echo "a大于b"
else
echo "a小于b"
fi
2.if elif
#!/bin/bash
if [ 1 -gt 2 ];then
echo "1>2"
elif [ 2 -gt 1 ];then
echo "2>1"
else
echo "什么鬼"
fi
If [ -f fileName ]判断是否是文件file
If [ -d fileName ]判断是否是文件夹dir
9.注释:
单行:#
多行:举例:
#!/bin/bash
:<<!
echo "hehe"
echo "aaaa"
!
echo "haha"
#!/bin/bash
: ‘ (:与’之间有空格)
echo "hehe"
echo "aaaa"
‘
echo "haha"
10.$0,$1,$#
$0 代表文件本身的名字,你输入的是什么就显示的什么
$1 代表第一个参数
$# 代表参数的个数
$? 上一条命令的返回值
假如上一条命令执行成功:返回 ture;否则 返回 false
0 代表成功
1 代表失败
原文地址:https://www.cnblogs.com/zxn0628/p/11235662.html