[毫无技巧的]shell基础语法

阅读: 评论:0

[毫无技巧的]shell基础语法

[毫无技巧的]shell基础语法

shell脚本可以实现自动化批量作业,减少人为参与,其底层是用C实现的,shell脚本是人与系统交互的语言,一般用来处理各种文件,处理管道等工作

输出

#! /bin/bash
echo "Hello World"

变量

#! /bin/bash
name=hello
echo $name #等价于echo ${name}
echo ${#name} #等价于cout << name.size();
echo ${name:0:3} #输出下标志0开始的三个字符

文件参数变量(类似于输入)

$0,$1,$2等等这些是你传给脚本的参数, 0 是 当 前 脚 本 名 ‘ ‘ ‘ 0是当前脚本名 ``` 0是当前脚本名‘‘‘# 是脚本名后面传入参数的个数 ? ‘ ‘ ‘ 是 上 一 条 命 令 返 回 值 , 是 r e t u r n 状 态 ‘ ‘ ‘ ?```是上一条命令返回值,是return状态 ``` ?‘‘‘是上一条命令返回值,是return状态‘‘‘(command)是返回命令输出值,是stdout 'command’$(command)```是一样的结果

数组

#! /bin/bash
array=(1 2 3 4)
echo ${array[0]}
echo ${array[*]} #输出全部内容
echo ${array[@]} #输出全部内容
echo ${array[*]} #输出数组长度,如果是${#array}的话输出1

expr

表达式用空格隔开,expr命令执行stdout结果,在exit code中也反馈结果

1.字符串表达式

#! /bin/bash
str="Hello World"
echo $(expr length "$str")
#这里$str外面加双引号是将其作为一个整体传入,否则str内容中空格后面是新的参数
echo $(expr index "$str" aWd) #查询aWd中任意一个字符在字符串中出现的第一个下标
echo 'expr substr "$str" 1 2' #这里是指下标为1的情况下,输出从下表1开始长度为2的子串

2.整数表达式

#! /bin/bash
a=3
b=4echo `expr $a + $b`  # 输出7
echo `expr $a - $b`  # 输出-1
echo `expr $a * $b`  # 输出12,*需要转义
echo `expr $a / $b`  # 输出0,整除
echo `expr $a % $b` # 输出3
echo `expr ( $a + 1 ) * ( $b + 1 )`  # 输出20,值为(a + 1) * (b + 1),这里的括号需要转译

read

相当于cin

#! /bin/bash
read name
echo ${name}read -p "What;s your name?" name #-p后面接提示信息
read -t 5 name #5s时限输入,否则自动跳过
#注意这个name要放在最后,如果先name然后再-t 5是不符合语法的

echo

echo -e Hello World 'c' #不换行输出
echo Bochiecho "Hello" > output.md #将输出结果重定向到文件里

printf

几乎和C/C++的一模一样

printf "%10d.n" 123  # 占10位,右对齐
printf "%-10.2f.n" 123.123321  # 占10位,保留2位小数,左对齐
printf "My name is %sn" "yxc"  # 格式化输出字符串
printf "%d * %d = %dn"  2 3 `expr 2 * 3` # 表达式的值作为参数

逻辑运算符

利用短路功能来实现if判断

test命令

test命令与判断符号[]
expr是stdout,用1表示真
test是用exit code返回,所以用0来表示真

判断语句和case语句

if-else语句

if condition
then语句1语句2...
fi
if condition
then语句1语句2...
else语句1语句2...
fi

case语句

case $变量名称 in值1)语句1语句2...;;  # 类似于C/C++中的break值2)语句1语句2...;;*)  # 类似于C/C++中的default语句1语句2...;;
esac

在shell脚本中,使用-eq、-ne、-gt、-ge、-lt、-le进行整数的比较。英文意思分别为:
-eq :equal(相等)
-ne :not equal(不等)
-gt :greater than(大于)
-ge :greater than or equal(大于或等于)
-lt :less than(小于)
-le :less than or equal(小于或等于)

循环语句

for

#! /bin/bash
for i in 1 2 3 4
doecho $i
done

输出n in [x,y]
{x..y}代表一个序列,由[min,max]的这样一个序列

for i {1..20} #这里如果是{0..9}就会输出0到9for i in $(seq 1 10)for ((i = 0;i < n;i ++))for i in $(ls)

while

while condition
do语句1语句2...
done
```shell
do...done
until获得想要的答案才结束循环,yxc说这类似npy直到你认错才原谅你,而现实中的npy可比此复杂多了
```shell
#! /bin/bash
until [ "$name" == "Jack" ]
doread -p "input your name:" name
done

continue和C/C++的一样

函数

shell的return是0~255之间的数字

[function] func_name() {  # function关键字可以省略语句1语句2...
}

递归求斐波那契

#! /bin/bash
f()
{if [ expr $1 -le 0 ]thenecho 0return 0fin=$(f $(expr $1 - 1))echo $(expr $n + $1)#相当于return n + f(n - 1),不过这里的f(n - 1)提前算出来传给n而已
}
echo $(f $1)

exit

exit code

文件重定向

ls > output

>直接覆盖文件
>>追加方式重定向

引入外部脚本

. filename  # 注意点和文件名之间有一个空格或source filename

本文发布于:2024-01-28 09:53:12,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064067966578.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:语法   技巧   基础   shell
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23