Shell入门

创建脚本

# touch hello.sh

头部

#!/bin/bash

编辑为可执行文件后执行

# chmod +x ./hello.sh
# ./hello.sh #启用子shell进行运行
# . hello.sh #同层shell进行运行
# source hello.sh #同层shell进行运行

变量

以$符开始

系统预定义变量(全局)

$HOME #家目录
$PWD #当前工作目录
$USER #当前用户
$PATH

显示系统中所有的预定义变量

# env

显示当前shell中所有的变量

# set

自定义类型(局部)

基本语法

变量名=值(=前后不能加空格)

my_var=1

export 变量名, 可以将变量提为全局变量

export my_var

运算符

a=$((1+6))
a=$[1+6]

只读变量

readonly b=5

取消变量(不能取消只读变量)

unset a

特殊变量

$n(数字)

调用脚本时的位置参数
$0指脚本名字(调用时如何输入)
$#指参数个数

#! /bin/bash
echo '============$n================' #单引号可以让$n失效为字符串
echo $0
echo $1
echo $2
echo $#

$* 和 $@

$*把所有参数作为一个整体
$@也是获取所有参数, 但是可以用循环遍历

在 for xxx in $* 和 for xxx in $@  是一个效果
在 for xxx in "$*" 和 for xxx in "$@"  效果不同

$?

最后一次执行的命令的返回状态
如果这个变量的值为0, 证明上一个命令正确执行,
如果非0, 则证明上个命令执行不正确

运算符

$((运算式)) 或者 $[运算式]

echo $((5*2))
echo $[5*2]
#命令转换的方式
echo $(expr 5 \* 2)
echo `expr 5\* 2`

流程控制

条件判断

test

# a=hello
# echo $a
# test $a = hello
# echo $?
0
# test $a = Hello
# echo $?
1

[ condition ] (记得空格空开)

# [ $a = hello ]
# echo $?
0
# [ $a = Hello ]
# echo $?
1
# [ asdfghjkl ]
# echo $?
0
# [  ]
# echo $?
1
# [ $a != Hello ]
# echo $?
0

常用条件判断

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
逻辑与 && -a

[ condition1 ] && [ condition2 ]
[ condition1 -a condition2 ]

逻辑或 ||

[ condition1 ] || [ condition2 ]
[ condition1 -o condition2 ]

逻辑短路

# [ condition ] && echo OK || echo NO

如果condition是true, 执行&&后面的
如果condition是false, 执行||后面的

分支流程

if [ condition ];then
	程序
fi
if [ condition ]
then
	程序
fi
if [ condition ]
then
	程序
elif  [ condition ]
then
	程序
else
then
	程序
fi
case $a in
"v1")
	程序
;;
"v2")
	程序
;;
*)
	程序
;;
esac

注: 防止shell脚本未传参运行报错

#!/bin/bash
if [ "$1"x = "sunya"x ]
then
echo OK
fi

循环流程

for (( 初始值;循环条件;变量变化 ))
do
	程序
done
for (( i=1; i <= $1; i++ ))
do
	sum=$[ $sum + $i ]
done
echo $sum

注: 这里用的双小括号, 可以直接使用数学运算式, 可以用<=

for 变量 in 值1, 值2, 值...
do
	程序
done
for i in {1..100} #1-100的序列
do
	程序
done
a=1
while [ $a -le $1 ]
do
	sum=$[ $sum + $a ]
	a = $[ $a + 1 ]
done

注: 可以用let去掉这样的反人类写法

a=1
while [ $a -le $1 ]
do
	let sum+=a
	let a++
done

read读取控制台输入

read (选项) (参数)

选项:
-p: 指定读取时的提示符
-t: 指定读取值时等待的时间(秒), 用户一直不输入会超时退出
参数:
变量: 指定读取到某个变量参数中

read  -t 10 -p "请输入名称" name
echo "$name"

函数

系统函数

# date
当前时间
# basename /root/scri/asdfg
asdfg
本质是字符串的一个替换
basename [string] [suffix]
还可以把后缀去掉
# basename ./hello.sh .sh
hello
# dirname  /root/scri/asdfg
/root/scri

获取绝对路径

echo sript path : $(cd $(dirname $0); pwd)

自定义函数

[function] funname [()]
{
	Action;
	[return int;]
}
中括号的内容可以省略
#!/bin/bash
function add(){
	s=$[$1 + $2]
	echo $s
}
read -p "请输入第一个整数: " a
read -p "请输入第一个整数: " b
add $a $b
#!/bin/bash
function add(){
	s=$[$1 + $2]
	echo $s
}
read -p "请输入第一个整数: " a
read -p "请输入第一个整数: " b
sum=$(add $a $b)
echo $sum
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值