Shell语法

本文介绍了shell脚本编程的基础内容。编写时脚本命名以.sh结尾,首行需引入/bin/bash。涵盖声明变量(局部、环境、输入参数)、循环语句(for、while)、if语句、算数运算(多种运算符)、重定向,还详解了方法参数传递机制及函数格式(有无返回值)。

编写shell脚本第一步,命名是以xx.sh结尾,但是编写内容的第一行一定要加上

#!/bin/bash

类似于java类中的第一行一定是包名。#代表引入/bin/bash。除了第一行的#,下面再使用#都是代表注释的意思。

#!/bin/bash
echo “demo”

运行该脚本,显示没有权限

$./demo.sh
-bash:./demo.sh:permission denied

因此需要给与运行权限

$chmod 777 demo.sh
$./demo.sh
demo

另外通过:

$/bin/bash demo.sh
demo

这种情况下不需要给与权限。

声明变量

局部变量声明与使用
#!/bin/bash
A=20
echo $A
$./demo.sh
20
环境变量
#!/bin/bash
echo $PWD
$./dmeo.sh
/root

$PWD代表当前路径

输入参数

在这里插入图片描述

#!/bin/bash
echo $0
echo $1
echo $2
echo "this \$? is $?"
echo "this \* is $*"
echo "this \# is $#"
$./demo.sh test1 test2 test3
./demo.sh
test1
test2
this $? is 0
this \* is test1 test2 test3
this \# is 3

循环语句for

for 变量 in 字符串
do
语句
done

#!/bin/bash
for i in `seq 1 15`
do
        echo "数字$i"
done

j=0
for((i=0;i<=100;i++))
do
        j=`expr $i + $j`
done
echo $j        
$./numner.sh
数字1
数字2
数字3
数字4
数字5
数字6
数字7
数字8
数字9
数字10
数字11
数字12
数字13
数字14
数字15
5050

循环语句while

while条件语句
do
语句
done

#!/bin/bash
i=0
while((i<100))
do
	echo "数字 $i"
	i=`expr $i + 1`
done
$./while.sh
数字 0
数字 1
数字 2
数字 3
数字 4
数字 5
...

上述脚本语句等价于

#!/bin/bash
i=0
while [[ $i -lt 100 ]]
do
	echo "数字 $i"
	i=`expr $i + 1`
done

使用while读取文件

#!/bin/bash
while read line
do
	echo $line	
done</root/text.txt

if语句

#!/bin/bash
NUM1=200
NUM2=300
if (( $NUM1>$NUM2));then
	echo "NUM1>NUM2"
else
	echo "NUM1<NUM2"
fi

辑运算符
在这里插入图片描述

#!/bin/bash
NUM1=200
NUM2=300
if (( $NUM1> $NUM2 )); then
	echo "NUM1>NUM2"
else
	echo "NUM1<NUM2"
fi
#!/bin/bash
FILE_PATH=/root/text.txt
if [ ! -f $FILE_PATH ]; then
	touch $FILE_PATH
else
	echo "文件已创建"
	cat  $FILE_PATH
fi

算数运算

在这里插入图片描述

算术运算符算数云算符###### 算数运算方式
1. 使用$(())
$r=$(( 5 + 5 ))
$echo $r
10
2. 使用$[]
$r=$[6+9]
$echo $r
15
3. 使用let命令
$n=19
$let n=n+1
$echo $n
20
4. 使用expr外部程式
$n=`expr 1 + 1 `
$echo $n
2
关系运算符

在这里插入图片描述
注意:关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

布尔运算符在这里插入图片描述
#!/bin/bash
a=10
b=20
if [ $a!=$b ];then
	echo "$a != $b : a不等于b"
else
	echo "$a != $b : a等于b"
fi
$./bool.sh
10 != 20 : a等于b
逻辑运算符在这里插入图片描述
字符串运算符在这里插入图片描述
a="abc"
b="efg"
if [ $a = $b ];then
	echo "$a = $b : a等于b"
else
	echo "$a = $b : a不于b"
fi

if [ -z $a ];then
	echo "-z $a : 字符串长度为0 "
else
	echo "-z $a :字符串长度不为0 "
fi
$./bool.sh
abc = efg : a不于b
-z abc :字符串长度不为0 
文件测试运算符在这里插入图片描述

重定向

输入重定向

$ cat 0 < text.txt
hello world

0代表屏幕地址 < 和文件地址需要有空格

输出重定向

$echo hello world > file
$cat file
hello world

方法参数传递机制详解(函数编程)

函数格式在这里插入图片描述
无返回值的函数
#!/bin/bash
a=1
factorial(){
for((i=1;i<$1;i++))
do
	a=$[ $a * $i]
done
echo "$1的阶乘是 $a"
}

factorial 10
$./factorial.sh
10的阶乘是 362880
#!/bin/bash
a=1
factorial(){
for i in `seq $1`
do
	a=`expr $a \* $i`
done
echo "$1的阶乘是 $a"
}
factorial $1
$./factorial.sh 10
10的阶乘是 362880

注意:函数必须先定义在调用,自上而下

带返回值的函数
#!/bin/bash
fun(){
	read -p "请输入数值" num
	echo $[2*$num]
}
result=`fun`
echo "fun return value is:$result"
$ ./function.sh
请输入数值12
fun return value is:24

注意:如果返回的值是0-255之间的可以只用用return,但是大于255的只能用echo进行返回

<think>好的,用户想了解Shell语法的问题。首先,我需要确定用户对Shell的了解程度,但用户没有明确说明,所以应该从基础开始,逐步深入。 Shell有很多种,比如Bash、Zsh等,但最常见的是Bash,所以先假设用户问的是Bash。接下来,需要考虑常见的问题点,比如变量、字符串处理、条件判断、循环、函数、重定向、管道、脚本调试等。 用户可能需要实际例子来理解语法,所以每个部分都要配上示例代码。同时,要提醒语法中的常见错误,比如空格问题、引号的使用、变量赋值不能有空格等。 还要注意格式,按照用户的要求,行内公式用$...$,独立公式用$$...$$,不过Shell语法中可能数学表达式不多,但如果有的话要正确应用。比如在算术展开时,可以用$((表达式)),但这里可能不需要LaTeX公式,但如果有涉及数学的地方,比如计算,可能需要提到。 另外,用户希望结构清晰,分步骤解决问题,所以需要分点列出各个语法部分,每个部分给出说明和示例。可能还需要比较不同Shell的差异,但考虑到用户可能刚入门,先以Bash为主,最后再简要提及其他Shell。 最后,需要检查LaTeX语法是否正确,虽然Shell内容中可能用到的数学公式不多,但如果有变量或表达式,确保用$...$包裹。比如在讲解算术运算时,可能涉及变量$var,这时候需要正确应用格式。 总结,回答应该分为变量、字符串处理、条件判断、循环、函数、输入输出、调试等部分,每个部分给出简明解释和示例,并注意常见错误点,帮助用户逐步理解和解决问题。</think>以下是对Shell语法问题的分步介绍: 1. **变量操作** - 定义变量:`变量名=值`(⚠️注意:等号两边不能有空格) ```bash name="Alice" age=25 ``` - 使用变量:`$变量名` 或 `${变量名}` ```bash echo $name # 输出 Alice echo ${name}_info # 输出 Alice_info ``` 2. **字符串处理** - 拼接字符串: ```bash str1="Hello" str2="World" result="$str1 $str2!" # Hello World! ``` - 截取子串: ```bash str="abcdefg" echo ${str:1:3} # 输出 bcd(从索引1开始取3个字符) ``` 3. **条件判断** - 基本格式: ```bash if [ 条件 ]; then # 命令 elif [ 条件 ]; then # 命令 else # 命令 fi ``` - 常用比较运算符: ```bash [ $a -eq $b ] # 等于 [ $a -gt $b ] # 大于 [ -f "file" ] # 文件存在 [ -z "$var" ] # 变量为空 ``` 4. **循环结构** - for循环: ```bash for i in {1..5}; do echo $i done ``` - while循环: ```bash count=0 while [ $count -lt 5 ]; do echo $count ((count++)) done ``` 5. **函数定义** ```bash function greet() { local name=$1 # 局部变量 echo "Hello, $name" } greet "Bob" # 调用函数 ``` 6. **输入/输出重定向** ```bash command > file.txt # 覆盖写入 command >> file.txt # 追加写入 command 2>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值