Shell基础知识

Shell脚本基础

参考:Shell 变量 | 菜鸟教程 (runoob.com)

脚本如Build.sh
执行命令:./Build.sh

1.Shell 变量

如:your_name=“runoob”

注:

无效例子:

避免使用if作为变量名
if="some_value"
避免使用 $ 等特殊符号
variable_with_$=42
?var=123
user*name=runoob
避免空格
variable with space="value"

等号两侧避免使用空格:
正确的赋值
variable_name=value
有可能会导致错误
variable_name = value

除了显式地直接赋值,还可以用语句给变量赋值,如:

for file in `ls /etc`
或
for file in $(ls /etc)

以上语句将 /etc 下目录的文件名循环出来。

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="qinjx"
echo $your_name
echo ${your_name}  //加花括号是为了帮助解释器识别变量的边界,推荐给所有变量加上花括号
只读变量
myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.runoob.com"  //不会改变值
删除变量
unset variable_name  //删除后不能再使用
环境变量
echo $PATH   //例如,PATH 变量包含了操作系统搜索可执行文件的路径
特殊变量
有一些特殊变量在 Shell 中具有特殊含义,例如 $0表示脚本的名称,$1,$2, 等表示脚本的参数。$#表示传递给脚本的参数数量,$?表示上一个命令的退出状态等。
多行注释
: '
这是注释的部分。
可以有多行内容。
'

2.传递参数:

**PRG=“$0”**表示当前脚本路径

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为 $nn 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数。

例如可以使用 $1、$2 等来引用传递给脚本的参数,其中 $1 表示第一个参数,$2 表示第二个参数,依此类推。

例子:

echo "Shell 传递参数实例!";
echo "第一个参数为:$1";

echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";

执行脚本,输出:
$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
第一个参数为:1
参数个数为:3
传递的参数作为一个字符串显示:1 2 3

3.运算符:

#!/bin/bash
val=‘expr 2 + 2’              //必须有空格2 + 2,必须有' ';
echo "两数之和为 : $val"

假定变量 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。

4.echo命令

显示命令执行结果
echo `date`      // 这里使用的是反引号 `, 而不是单引号 '

结果:
Thu Jul 24 10:08:46 CST 2014

5.test测试命令选项

数值测试
参数说明
-eq等于则为真
-ne不等于则为真
-gt大于则为真
-ge大于等于则为真
-lt小于则为真
-le小于等于则为真
if test $[num1] -eq $[num2]
文件测试
-e 文件名如果文件存在则为真
-r 文件名如果文件存在且可读则为真
-w 文件名如果文件存在且可写则为真
-x 文件名如果文件存在且可执行则为真
-s 文件名如果文件存在且至少有一个字符则为真
-d 文件名如果文件存在且为目录则为真
-f 文件名如果文件存在且为普通文件则为真
-c 文件名如果文件存在且为字符型特殊文件则为真
-b 文件名如果文件存在且为块特殊文件则为真

-h 测试文件是否是符号链接

6.流程控制

if 语句语法格式:
if condition
then              //如果为真,执行then和else之间语句
    command1 
    command2
    ...
    commandN 
fi                //结束语句

写成一行(适用于终端命令提示符):

if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
if else 语法格式:
if condition
then           //如果为真,执行then和else之间语句
    command1 
    command2
    ...
    commandN
else           //如果条件为假,执行 else 和 fi 之间的命令
    command
fi              //结束语句
if else-if else 语法格式:
if condition1
then                   //如果条件1为真,执行 then 和 elif 之间的命令
    command1
elif condition2        //如果条件1为假且条件2为真,执行 elif 和 else 之间的命令。
then 
    command2
else                   //如果条件1和条件2都为假,执行 else 和 fi 之间的命令。
    commandN
fi
for循环
for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

输出:
The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5
while 语句
while condition
do
    command
done
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值