Shell个人记录

本文介绍了BashShell脚本中的变量命名规则,包括有效的和无效的示例,以及如何引用变量。接着讲解了数组的定义与读取,以及基本的算术运算,如加减乘除。文章还涵盖了条件判断如if、if-else、if-elif-else语句,以及for和while循环的使用。此外,提到了case...esac结构、函数的创建与调用,以及输入/输出重定向的用法。
摘要由CSDN通过智能技术生成

变量

# 命名规则
# 1.命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
# 2.中间不能有空格,可以使用下划线 _。
# 3.不能使用标点符号。
# 4.不能使用bash里的关键字(可用help命令查看保留关键字)。
# 有效变量名
	your_name="runoob.com"
	RUNOOB
	LD_LIBRARY_PATH
	_var
	var2
# 无效变量名
	?var=123
	user*name=runoob
	
#引用变量 $变量名
$your_name
${your_name} #加大括号是为了确定变量边界

echo $your_name #输出结果为  runoob.com

数组

# 定义规则    数组名=(值1 值2 ... 值n)
array_name=(value0 value1 value2 value3)

# 读取数组    ${数组名[下标]}
valuen=${array_name[n]}
#@代表数组中所有元素
echo ${array_name[@]}

运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

# 注意使用的是反引号 ` 而不是单引号 '
# 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2。
val=`expr 2 + 2`
echo "两数之和为 : $val"

# 输出结果为 两数之和为 :4

# 例子
a=10
b=20

val=`expr $a + $b`
echo "a + b : $val"

# 结果  a + b : 30

val=`expr $a - $b`
echo "a - b : $val"

# 结果  a - b : -10

val=`expr $a \* $b`
echo "a * b : $val"

# 结果  a * b : 200

val=`expr $b / $a`
echo "b / a : $val"

# 结果  b / a : 2

val=`expr $b % $a`
echo "b % a : $val"

# 结果  b % a : 0

if [ $a == $b ]
then
   echo "a 等于 b"
fi  
if [ $a != $b ]
then
   echo "a 不等于 b"
fi

# 结果  a 不等于 b

在这里插入图片描述

echo命令

name=w

echo "name"
# name

echo $name
# w

# 注意: 这里使用的是反引号 `, 而不是单引号 '。
echo `date`
# 命令执行结果

# 显示结果到指定文件
echo "It is a test" > myfile

test命令

用来判断条件是否成立

数值参数

num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

# 结果 两个数相等!
#------------------------------------------------

在这里插入图片描述

字符串参数

a=5
b=6

result=$[a+b] # 注意等号两边不能有空格
echo "result 为: $result"

# 结果 result 为: 11

在这里插入图片描述

文件参数

cd /bin
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi

# 结果 文件已存在!

在这里插入图片描述

Shell 还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为: ! 最高, -a 次之, -o 最低。

流程控制

if

# 语法1
if condition
then
    command1 
    command2
    commandN 
fi

# 语法2
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

if else

# 语法 
if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

if else-if else

# 语法
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

例如

a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi

# 结果 a 小于 b

for循环

# 语法1
for var in item1 item2 itemN
do
    command1
    command2
    ...
    commandN
done

#语法2
for var in item1 item2 itemN; do command1; command2 done;

# 例如
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

#例子
#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

#结果
1
2
3
4
5

case … esac

#语法
casein
模式1)
    command1
    command2
    ;;
模式2)
    command1
    command2
    ;;
esac

# read 键盘输入
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac


# 结果-------------------------------------
输入 14 之间的数字:
你输入的数字为:
3
你选择了 3

关键字

read 键盘输入

break 跳出循环

continue 开始下一次循环

函数

# 例子
funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum$anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"


# 结果-------------------------
这个函数会对输入的两个数字进行相加运算...
输入第一个数字: 
1
输入第二个数字: 
2
两个数字分别为 12 !
输入的两个数字之和为 3 !

带参数

# $1 代表第一个参数
# 注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。
funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

# 结果------------------------------------
第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

输入/输出重定向

命令列表
在这里插入图片描述

输出重定向

# who 命令执行结果输出到test.txt文件
who > test.txt

#查看文件内容
cat test.txt

输出重定向会覆盖文件内容

echo "输出重定向会覆盖文件内容" > test.txt

#查看文件内容
cat test.txt

如果不希望文件内容被覆盖,可以使用 >> 追加到文件末尾

echo "输出重定如果不希望文件内容被覆盖,可以使用 >> 追加到文件末尾" >> test.txt

#查看文件内容
cat test.txt

输入重定向

注意两个命令输出结果 , 第一个例子,会输出文件名;第二个不会,因为它仅仅知道从标准输入读取内容。

# wc -l 统计行数

wc -l test.txt

wc -l < test.txt

同时输入输出

wc -l < test.txt > test1.txt

EOF

# EOF 简单来说就是把一段固定格式内容传入程序或变量
wc -l << EOF
    欢迎来到
    shell
EOF

curl

-X/–request 参数

指定请求方式,如 GET、POST、HEAD、PUT、DELETE、PATCH。

例:

curl -X GET http://localhost:8080/search?data=123  # -X GET是可选的

curl -X POST -d "data=123&key=456" http://localhost:8080/search

JSON数据以 请求体(body) 请求

curl -H "Content-Type:application/json" -X POST --data '{"message": "sunshine"}' http://localhost:8000/

-d/–data 参数

HTTP POST方式传送数据。

-d 选项是以使用 POST 方式向 Server 发送数据,因此在使用 -d 的时候,可以省略 -X POST。请注意,使用 -d 时,将使用 Content-type:application/x-www-form-urlencoded 方式发送数据。如果想使用 JSON 形式 post 数据,可以使用 -H 指定头部类型。如:

curl -H "Content-Type:application/json" -d '{"data":"123","key":"456"}' http://localhost:8080/search

-H/–header 参数

自定义头信息传递给服务器。

例:

curl -H "Host:192.168.0.1" -H "accept-language:zh-cn" URL

-c/–cookie-jar 参数

操作结束后把 cookie 写入到这个文件中。

例:

curl -d "name=zhangsan&password=123" http://localhost:8080/login -c ./cookie

-b/–cookie <name=string/file> 参数

cookie 字符串或文件读取位置

例:

# cookie 文件
curl http://localhost:8080/login -b ./cookie

# 直接指定 cookie
curl --cookie "name=zhangsan" http://localhost:8080/login

-F/–form <name=content>/–form-string <name=string> 参数

模拟 http 表单提交数据,curl 可以通过-F命令来以Content-Type:multipart/form-data的形式向 server post 数据,该命令允许提交二进制文件等。可以使用@前缀来制定提交的内容为一个文件,也可以使用<符号来提交文件中的内容。

例:

# 向服务器上传一个图片,图片的表单 name 为 profile,内容为 protrait.jpg 的二进制

curl -F prefile=@portrait.jpg https://example.com/upload

-O/–remote-name

把输出写到该文件中,保留远程文件的文件名。

例:

curl http://man.linuxde.net/text.iso --silent -O

-o/–output

把输出写到指定文件中。

例:

# 选项 -o 将下载数据写入到指定名称的文件中,并使用 --progress 显示进度条:

curl http://man.linuxde.net/test.iso -o filename.iso --progress

################################### 100.0%

-s/–silent 命令

静默模式,不输出任何东西。

curl http://man.linuxde.net/text.iso --silent -O

-i/–include

输出时包括 response 头信息

例:

curl -i https://www.baidu.com

-I/–head

只显示请求头信息

例:

curl -I https://www.baidu.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值