shell脚本学习

定义shell变量:
 
         
1
your_name="runoob.com"
2
//变量名和等号之间不能有空格
3
//不能以数字开头。
4
//只能数字字母下划线组成
控制台输出变量:
 
         
1
echo $your_name
2
echo ${your_name}
3
//使用一个定义过的变量,只要在变量名前面加美元符号,最好使用第二种加花括号的便于识别
定义只读变量:
 
         
1
readonly your_name
删除定义的变量:
 
         
1
unset variable_name
2
//unset 加变量名
3
//unset 命令不能删除只读变量。
拼接字符串:
 
         
1
your_name="qinjx"
2
greeting="hello, ${your_name} !"
3
echo $greeting
获取字符串的长度:
 
         
1
echo ${#your_name} 
2
//#输出 4
提取字符串:
 
         
1
echo ${your_name:1:4} 
2
//下标从1开始,输出4个的字符
查找子字符串:
 
         
1
string="runoob is a great company"
2
echo `expr index ${string} un`  
3
//`是tab键,反引号
4
//查找un的位置是2
获取数组所有元素:
 
         
1
echo ${array_name[@]}
2
//数组名=(值1 值2 ... 值n)  数组元素用"空格"符号分割开
3
//使用@符号可以获取数组中的所有元素
 
         
1
# 取得数组元素的个数
2
length=${#array_name[@]}
3
# 或者
4
length=${#array_name[*]}
5
# 取得数组单个元素的长度
6
lengthn=${#array_name[n]}
shell脚本循环:
 
         
1
my_arry=(a b "c","d" abc)
2
echo "-------FOR循环遍历输出数组--------"
3
for i in ${my_arry[@]};
4
do
5
  echo $i
6
done
7
 
         
1
echo "-------::::WHILE循环输出 使用 let i++ 自增:::::---------"
2
j=0
3
while [ $j -lt ${#my_arry[@]} ]
4
do
5
  echo ${my_arry[$j]}
6
  let j++
7
done
8
//$变量的前后都要有空格,不然报错无法输出
运算:
 
         
1
val=`expr 2 + 2`
2
echo "两数之和为 : $val"
3
//表达式和运算符之间要有空格
4
//完整的表达式要被 ` ` 反引号包含
5
6
7
val=`expr $a \* $b`
8
echo "a * b : $val"
9
//乘号(*)前边必须加反斜杠(\)才能实现乘法运算;

代码中的 [] 执行基本的算数运算,如:

 
          
1
#!/bin/bash
2
3
a=5
4
b=6
5
6
result=$[a+b] # 注意等号两边不能有空格
7
echo "result 为: $result"

结果为:

 
          
1
result 为: 11

条件表达式:
 
         
1
if [ $a == $b ]
2
then
3
   echo "a 等于 b"
4
fi

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例
-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。
-ne检测两个数是否相等,不相等返回 true。[ $a -ne $b ] 返回 true。
-gt检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
-lt检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
-ge检测左边的数是否大于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。
关系运算符实例:
 
         
1
a=10
2
b=20
3
4
if [ $a -eq $b ]
5
then
6
   echo "$a -eq $b : a 等于 b"
7
else
8
   echo "$a -eq $b: a 不等于 b"
9
fi
10
if [ $a -ne $b ]
11
then
12
   echo "$a -ne $b: a 不等于 b"
13
else
14
   echo "$a -ne $b : a 等于 b"
15
fi
16
if [ $a -gt $b ]
17
then
18
   echo "$a -gt $b: a 大于 b"
19
else
20
   echo "$a -gt $b: a 不大于 b"
21
fi
22
if [ $a -lt $b ]
23
then
24
   echo "$a -lt $b: a 小于 b"
25
else
26
   echo "$a -lt $b: a 不小于 b"
27
fi
28
if [ $a -ge $b ]
29
then
30
   echo "$a -ge $b: a 大于或等于 b"
31
else
32
   echo "$a -ge $b: a 小于 b"
33
fi
34
if [ $a -le $b ]
35
then
36
   echo "$a -le $b: a 小于或等于 b"
37
else
38
   echo "$a -le $b: a 大于 b"
39
fi

布尔运算符

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例
!非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。
-o或运算,有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false。

逻辑运算符

以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例
&&逻辑的 AND[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||逻辑的 OR[[ $a -lt 100 || $b -gt 100 ]] 返回 true
1
a=10
2
b=20
3
4
if [[ $a -lt 100 && $b -gt 100 ]]
5
then
6
   echo "返回 true"
7
else
8
   echo "返回 false"
9
fi
10
//[[ 条件]] 
11
12

字符串运算符

下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg":

运算符说明举例
=检测两个字符串是否相等,相等返回 true。注意: 比较数字是==[ $a = $b ] 返回 false。
!=检测两个字符串是否相等,不相等返回 true。[ $a != $b ] 返回 true。
-z检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。
-n检测字符串长度是否为0,不为0返回 true。[ -n $a ] 返回 true。
str检测字符串是否为空,不为空返回 true。[ $a ] 返回 true。

显示结果定向至文件

 
        
1
echo "It is a test" > myfile
2
//会把myfile的内容覆盖
显示当前日期:
 
         
1
echo `date`

echo输出的字符串总结

===================================================================

                       |    能否引用变量 | 能否引用转移符 | 能否引用文本格式符(如:换行符、制表符)

单引号            | 否                      |        否                | 否

双引号            | 能                      |        能                | 能

无引号            | 能                      |        能                | 否

===================================================================

printf命令:

%d %s %c %f 格式替代符详解:

d: Decimal 十进制整数 -- 对应位置参数必须是十进制整数,否则报错!

s: String 字符串 -- 对应位置参数必须是字符串或者字符型,否则报错!

c: Char 字符 -- 对应位置参数必须是字符串或者字符型,否则报错!

f: Float 浮点 -- 对应位置参数必须是数字型,否则报错!

如:其中最后一个参数是 "def",%c 自动截取字符串的第一个字符作为结果输出。

 
         
1
$  printf "%d %s %c\n" 1 "abc" "def"
2
1 abc d

if else-if else

语法格式:

 
         
1
if condition1
2
then
3
    command1
4
elif condition2 
5
then 
6
    command2
7
else
8
    commandN
9
fi

for 循环

 
         
1
for var in item1 item2 ... itemN
2
do
3
    command1
4
    command2
5
    ...
6
    commandN
7
done

例如,顺序输出当前列表中的数字:

 
         
1
for loop in 1 2 3 4 5
2
do
3
    echo "The value is: $loop"
4
done

无限循环

无限循环语法格式:

 
        
1
while :
2
do
3
    command
4
done

或者

 
        
1
while true
2
do
3
    command
4
done

或者

 
        
1
for (( ; ; ))

与键盘交互,case in与每一种模式进行匹配:

 
         
1
echo '输入 1 到 4 之间的数字:'
2
echo '你输入的数字为:'
3
read aNum
4
case $aNum in
5
    1)  echo '你选择了 1'
6
    ;;
7
    2)  echo '你选择了 2'
8
    ;;
9
    3)  echo '你选择了 3'
10
    ;;
11
    4)  echo '你选择了 4'
12
    ;;
13
    *)  echo '你没有输入 1 到 4 之间的数字'
14
    ;;
15
esac

输入不同的内容,会有不同的结果,例如:

 
         
1
输入 1  4 之间的数字:
2
你输入的数字为:
3
3
4
你选择了 3

跳出循环

break,continue
 
         
1
while :
2
do
3
    echo -n "输入 1 到 5 之间的数字:"
4
    read aNum
5
    case $aNum in
6
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
7
        ;;
8
        *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
9
            break
10
        ;;
11
    esac
12
done
重定向输入和输出:
 
         
1
command1 < infile > outfile

同时替换输入和输出,执行command1,从文件infile读取内容,然后将输出写入到outfile中。


/dev/null 文件

如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:

1
$ command > /dev/null


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值