shell编程
Shell
1.新建一个脚本
新建一个xxx.sh文件
#!/bin/bash脚本标识
1.变量
1.1定义变量
myName=”小白”
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
- 首个字符必须为字母(a-z,A-Z)。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
使用变量:$变量名 为了区分,我们可以使用${变量名}
readonly 定义一个只读的变量,不能重新赋值
1.2删除变量
使用 unset 命令可以删除变量。语法:
unset variable_name
变量被删除后不能再次使用。unset 命令不能删除只读变量。
实例
#!/bin/bash
myUrl="http://www.runoob.com"
unset myUrl
echo $myUrl
2.Shell 字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。
单引号
str='this is a string'
单引号字符串的限制:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号
your_name='qinjx'
str="Hello, I know your are \"$your_name\"! \n"
双引号的优点:
- 双引号里可以有变量
- 双引号里可以出现转义字符
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 -gt $b ] 返回 true |
! |
非 |
[ !true ] 返回false |
-o |
或 |
[ true -o false ] 返回true |
-a |
与 |
[ true -o false ] 返回false |
注意:条件表达式要放在方括号之间,并且要有空格,例如: [$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}
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"
7.数组
定义数组
方式1:arr=()
方式2: arr=(value1 value2 value3) (这种方式带值)
注意:往数组里添加值,数组的长度自动增长
获取数组的长度:${#arr[*]}
遍历数组
#!/bin/bash
arr=(value value1 value2)
arr[0]=1
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 ]判断是否是文件
If [ -d ]判断是否是文件夹
9.注释:
单行:#
多行:举例:
#!/bin/bash
:<<!
echo "hehe"
echo "aaaa"
!
echo "haha"
#!/bin/bash
: ' (:与’之间有空格)
echo "hehe"
echo "aaaa"
'
echo "haha"