Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁
应用程序通过调用Shell解释器,运行Shell脚本,来控制Linux内核,Linux内核再控制硬件
Shell解释器本质上也是一种程序,常见的是Bounce Shell和Bounce Again Shell
#!/bin/bash echo "Hello World!" 12 #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。运行方式1
这种方式首先要赋予Shell脚本 +x 的运行权限,然后再运行
chmod +x ./test.sh# 使脚本有执行权限 ./test.sh# 执行脚本 12 运行方式2
这种方式通过直接调用解释器,将Shell脚本作为参数传给解释器
/bin/sh test.sh# 指定解释器,然后运行脚本 1
your_name="qinjx"# 定义变量 echo ${your_name}# 使用$符号引用变量,花括号可以不要,但好习惯还是保留 12 对定义过的变量进行重新赋值时,不需要使用美元符号
your_name="tom" echo $your_name your_name="alibaba"# 不能写成 $your_name="alibaba" echo $your_name 1234 将命令的返回值赋给变量
# 方式1:使用反引号,运行反引号里的命令,然后将结果返回给变量 A=`ls -la` for file in `ls /etc` # 方式2:使用美元符号 A=$(ls -la) for file in $(ls /etc) 123456 设置环境变量
将某个变量设置为环境变量,则可以在不同Shell脚本中都可以使用访问
步骤1:在 /etc/profile 最后一行添加自己的变量,然后export
TOMCAT_HOME=/opt/tomcat export TOMCAT_HOME 12 步骤2:输入source /etc/profile刷新配置文件
步骤3:之后就可以在不同的shell中使用该环境变量,例如直接在终端输入echo $TOMCAT_HOME预定义变量
Shell中有三个默认设定的变量
$?表示上一条命令执行的状态码,0代表正常,非0代表出错 $$查看当前进程的pid $0查看当前进程的名称 123
我们可以在执行 Shell 脚本时,向脚本传递参数
脚本内获取参数的格式为:$n
n 代表一个数字,$0 为执行的文件名,1 为执行脚本的第一个参数,10以后要用花括号括起
另外,还有几个特殊字符用来处理参数
$#传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数 $@与$*相同,但是使用时加引号 123
实例,创建一个如下shell脚本test.sh
#!/bin/bash echo "执行的文件名:$0" echo "第一个参数为:$1" echo "第二个参数为:$2" echo "第三个参数为:$3" echo "参数个数为:$#"; echo "传递的参数作为一个字符串显示:$*"; 1234567
然后在终端输入chmod +x test.sh和./test.sh 1 2 3,输出的结果如下
$ chmod +x test.sh $ ./test.sh 1 2 3 Shell 传递参数实例! 执行的文件名:./test.sh 第一个参数为:1 第二个参数为:2 第三个参数为:3 参数个数为:3 传递的参数作为一个字符串显示:1 2 3 123456789
Shell 和其他编程语言一样,支持多种运算符
基本语法:$((运算式))或者$[运算式]expr的基本语法#!/bin/bash val=`expr 2 + 2`# 表达式和运算符之间要有空格# 完整的表达式要被反引号扩起 echo "两数之和为 : $val" 1234 算数运算符
假定a=10,b=20 运算符说明举例+加法`expr $a + $b`,结果为30-减法`expr $a - $b`,结果为-10*乘法`expr $a * $b`,结果为200/除法`expr $a / $b`,结果为2%取余`expr $a % $b`,结果为0==相等。用于比较两个数字,相同返回 true[ $a == $b ],结果为false!=不相等。用于比较两个数字,不相同返回 true[ $a != $b ],结果为true *条件表达式要放在方括号之间,并且要有空格,例如:[$a==$b] 是错误的
实例:
#!/bin/bash a=10 b=20 val=`expr $a + $b` echo "a+b=$val" val = `expr $a -$b` echo "a-b=$val" val=`expr $a * $b` echo "a*b=$val" val=`expr $a / $b` echo "a/b=$val" val=`expr $a % $b` echo "a%b=$val" if [ $a == $b ] thenecho "a=b" fi if [ $a != $b ] thenecho "a!=b" fi
12345678910111213141516171819202122232425262728 关系运算符#!/bin/bash a=10 b=20 if [ $a -eq $b ] thenecho "a=b" fi if [ $a -ne $b ] thenecho "a!=b" fi if [ $a -gt $b ] thenecho "a>b" fi if [ $a -lt $b ] thenecho "a<b" fi if [ $a -ge $b ] thenecho "a>=b" fi if [ $a -le $b ] thenecho "a<=b" fi
123456789101112131415161718192021222324252627282930313233 布尔运算符分支结构 if
语法格式:
if condition1 then command1 elif condition2 then command2 else commandN fi 123456789
例子:
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 1234567891011121314
分支结构 case
语法格式:
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac 1234567891011121314
实例:
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 123456789101112131415
循环结构 for
语法格式:
for var in item1 item2 ... itemN do command1 command2 ... commandN done 1234567
实例:
for str in 'This is a string' do echo $str done 1234
循环结构 while
语法格式:
while condition do command done 1234
实例:
#!/bin/bash int=1 while(( $int<=5 )) do echo $int let "int++" done 1234567
跳出循环:Shell中也有break和continue,功能与其他编程语言相同
我们可以自己定义我们的函数
语法格式:
[ function ] funname [()] { action; [return int;]# return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 } 12345
实例:
funWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." echo "输入第一个数字: " read aNum echo "输入第二个数字: " read anotherNum echo "两个数字分别为 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum)) } funWithReturn echo "输入的两个数字之和为 $? !" 1234567891011
和其他语言一样,Shell 也可以包含外部脚本
这样可以很方便的封装一些公用的代码作为一个独立的文件
. filename # 注意点号(.)和文件名中间有一空格 或 source filename 123 实例
创建两个shell脚本
test1.sh如下
#!/bin/bash url="https://www.baidu.com" 12 test2.sh如下
#!/bin/bash # 使用 . 号引用test1.sh文件 . ./test1.sh echo "方式1百度的网址为:$url" # 使用 source引用 source ./test1.sh echo "方式2百度的网址为:$url" 12345678 然后给test2.sh添加执行权限并执行
chmod +x test2.sh
./test2.sh
方式1百度的网址为:https://www.baidu.com
方式2百度的网址为:https://www.baidu.com
相关知识
linux的shell中变量的含义
linux history 命令 shell历史记录显示 HISTSIZE
sed、awk调用shell变量的方法
linux device driver Makfile
shell 字符串分割与连接
linux expect的使用详解,实例
Linux Shell 之引号(单引号;双引号;反引号)
嵌入式linux与ARM开发板的入门建议
爱捣鼓Shell编程3:相等判断符=、==、
元编程艺术,第 1 部分: 元编程简介
网址: 10、Linux中的Shell编程 https://m.huajiangbk.com/newsview1271558.html
上一篇: 柳橙花奈米结构脂质载体之功效性研 |
下一篇: “客厅有树,十有九富”,8种吉祥 |