shell脚本--(符号和语法)

shell脚本

shell脚本:一直都在用,但是没有系统的学习过,只是在linux命令行模式敲一些简单的常用的指令,现在系统的学习一番。

一、创建shell脚本,一般以.sh结尾(linux下后缀只是种显示,没有任何具体含义)文件创建后需要chmod 0755 name 给它加上权限,之后就可以用./运行了

进入文件需要在最顶部加上shell脚本解释器,这个文件中的所有命令都会被bash拿到去解释。下面会说到shell的工作模式。

二、shell的工作模式;

我是这样理解的当我们在脚本中写这样一段程序的时候

#!/bin/bash
ls

这个时候shell是这样去解释的,当前shell(bash)会fork一个子bash去获得这个脚本中的所有命令,然后到ls这一行的时候,sh会再fork一个新的bash去execv这个ls可执行程序,之后将等待的结果输出到当前终端上。

shell的命令分两种,一种是内部命令,一种是shell可执行的应用程序,当执行内部命令的时候frok的子bash就会在它的空间内执行这条命令。

三、shell脚本中的一些常见符号:

1>简单符号

  1 #!/bin/bash
  2 #shell中用#作为注释
  3 count=1            #变量的定义不用声明类型,shell解释器会帮你去做
  4 val=0
  5 echo $count        #$符号用来取变量的值
  6 
  7 echo ${count}t     #建议加上{}因为有时候你会像这样去输出 
  8 
  9 val=$(date)     #$()的作用是命令替换,这行代码的意思就是将date的命令输出信息传给val
 10 echo $val        
 11 
 12 val=`date`       #``反引号的作用和$()一样都是命令替换,不同的是``中不能再用``
 13 echo $val        
 14 
 15 echo ‘val‘       #‘‘单引号的作用是保持字符串本身的意思,但它里面不能再有字符串了
 16 
 17 echo "va‘l‘"      # ""和单引号的不同在于它的里面可以有字符串‘‘                                                                                                                                                           
                                                                                                                       6,0-1        全部

2>意义符号


[ ]中括号的意思是一个判断语句注意[是一个命令所以后面要加空格,也可以用test命令。例如

 19 val=10
 20 
 21 test $val -eq 12   #test命令的书写格式,判断val的值是否等于12
 22 echo $?              
 23 [ $val -eq 10 ]   #[ ]命令的书写格式
 24 echo $?
 25 [ $val -eq 11 ]
 26 echo $?
 27 
 28 
                                                                                                             
                                                                                                                                            20,0-1       底端

echo $?的意思是拿到上一个执行语句的退出码,它的返回值成功为0失败为1。

3>shell下的比较命令;


-eq;等于

-ne;不等于

-lt;小于

-le;小于等于

-gt;大于

-ge;大于等于

另外的常用比较命令

-d 判断目录是则为真

-f 判断是文件则为真

逻辑与 -a  [ $val -gt 10 -a $val -lt 100] 大于10小于100的数

逻辑或 -o  [ $val -eq 10 -a $val -eq 100] 等于10或等于100的数

取反 !   [ $val -eq 10 -a $val -eq 100] 不等于10或不等于100的数



四、特殊变量

$0:相当于C语言main函数的argv[0]

$1、$2...

这些称为位置参数(Positional Parameter),相当于C语言main函数 的argv[1]、argv[2]...

$#

相当于C语言main函数的argc - 1,注意这里的#后面不表示注释

[email protected]

表示参数列表"$1" "$2" ...,例如可以用在for循环中的in后面。

$?

上面已经提过

$$

显示当前shell的进程号

可以看出和c不同的地方在于,它的arcg->$#只输出不包括./这一列。

shift命令可以将位置左移,例如上面的程序加上shift 2后,$1的输出则是one了,shift 1为默认不移动的值



五、常见符号的区别

1> [[双中括号和[单中括号的区别


[[中可以用 == ! && || 正则表达式进行判断,但是上面的结果显然有问题,[[ 在&& ||判断的时候很难判断正确


2> ``与$()

#$()的作用是命令替换,这行代码的意思就是将date的命令输出信息传给val
#``反引号的作用和$()一样都是命令替换,不同的是``中不能再用``

3> (())与let

(())和let都可以进行运算,基本可以互换的

((val++))

let val++

六、shell语法

while循环;

  1 #!/bin/bash
  2 
  3 val=0
  4 while [ $val -lt 10 ]
  5 do
  6     echo $val
  7     let val++
  8 done
  9  #注意do done的书写                                                                                                                   4,1          全部

if判断:

  1 #!/bin/bash
  2 
  3 val=10
  4 
  5 if [ $val -eq 10 ];
  6 then
  7     echo $val
  8 fi
  9 # if [] ; fi 的格式
                                                                                                                                                            
                                                                                                                    5,1          全部

for语句:

两种写法

  
  2 #写法一
  3 val=0
  4 
  5 for val in {0..100}
  6 do
  7     echo $val
  8 done
  9 #写法二
  10 val=0
  11 for (( val; val<=100 ;val++))
  12 do
  13     echo $val
  14 done
                                                                                                                                                            
                                                                                                                                       12,2         全部

switch case:

1 #!/bin/bash

2

3 read i

4

5 case $i in

6     a)

7     echo ‘a‘

8     ;;

9     b)

10     echo ‘b‘

11     ;;

12 esac



总结:shell脚本是类c风格的,shell的特点在于它有很多工具,这些工具会在后面的博客中详解。




时间: 2024-12-19 12:09:42

shell脚本--(符号和语法)的相关文章

shell 脚本-符号-基础语法

为了便于识别  建议 以.sh 结尾 shell脚本 可以放上所有的命令行的指令(源于bash) shell脚本 是 解释型语言      c/c++ 是编译型语言 下面用到的 shell代码sh_1.sh #!/bin/bash cd ../ ls pwd 解释型脚本的执行过程: script.sh 是文本文件,根本没有代码段和 _start  函数 , exec 怎么执行. 解释: Shell会fork 一个子进程并调用 exec执行 ./script.sh这个程序,exec 系统调用应该把

linux:shell脚本的一些语法

读取文件的第一行并赋值给变量 var=`head -1 filename` #`不是单引号,是Esc下方的一个按键,为命令替换符,将命令行执行结果赋给var 读取文件的第N行并赋值给变量 var=`sed -n Np filename` #把N替换成数字 逐行读取文件 while read line do echo $line done < filename linux:shell脚本的一些语法,布布扣,bubuko.com

如何在 Shell 脚本中执行语法检查调试模式

我们开启了 Shell 脚本调试系列文章,先是解释了不同的调试选项,下面介绍如何启用shell调试模式. 写完脚本后,建议在运行脚本之前先检查脚本中的语法,而不是查看它们的输出以确认它们是否正常工作. 在本系列的这一部分,我们将了解如何使用语法检查调试模式.记住我们之前在本系列的第一部分中解释了不同的调试选项,在这里,我们将使用它们来执行脚本调试. 启用 verbose 调试模式 在进入本指导的重点之前,让我们简要地探索下 verbose 模式.它可以用 -v 调试选项来启用,它会告诉 shel

shell脚本语言基本语法学习

Qiniu 七牛问题解答 shell脚本语言入门 问题解决方案 Shell日常学习 Cd / 进入到根目录 Pwd 当前目录结构 Tab 模糊查找补全命令 Ifconfg 查看当前网络的信息 *?[] 通配符 方便查询 星花* 匹配多个 ls *.tar ?匹配单个 ls m??? [ ] ls m* [od] 列出以m开头结尾为od 的目录火文件 Ls x* [0-9] Ls g *[m-p] 目录操作命令: 当前工作目录:pwd 进入主目录:cd ~ 列出文件类型:ls -F 列出隐藏文件:

shell脚本之基础语法

Shell脚本定义脚本名称:尽量做到观其名,明其意了解脚本大概是写什么的首行内容:#!/bin/bash,#!又称为shebang,/bin/bash是告诉解释器用的哪一个shell.shell脚本第一行必须这样写Shell脚本之条件测试分为三类类型为:整数测试:字符测试:文件测试测试的表达式为:[ 表达式 ] :为命令测试:[[ 表达式 ]]:为关键字测试Test 表达式:使用test命令进行测试:注意:[ 表达式 ]和[[ 表达式 ]]两边必须有空格,要不就报错误: Shell中真表示为tr

shell脚本--符号篇

shell执行脚本 shell是批处理语言(一次处理批量任务) shell写的都是文本文件,不能让操作系统运行它,而是fork创建子进程, 子进程程序替换shell的解释器,再把这个文本文件当做命令行参数传给bash解释器,子进程一行一行读取命令,遇到一行创建一个子进程,所以执行上述脚本相当于执行程序. shell变量 env显示环境变量 export将本地变量导入到环境变量 set显示环境变量和本地变量 unset删除已定义的本地变量和环境变量 变量引用 shell变量不需要明确定义类型,sh

Linux Shell脚本面试25问

Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务. Q:2 什么是默认登录shell,如何改变指定用户的登录shell 答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的.使用chsh命令可以改变默认的shell.示例如下所示: # chsh <用户名> -s <

阿里Linux Shell脚本面试25个经典问答

Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务. Q:2 什么是默认登录shell,如何改变指定用户的登录shell 答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的.使用chsh命令可以改变默认的shell.示例如下所示: Q:3 可以在shell脚本中使用哪些类

Linux Shell脚本面试基本20问

Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务. Q:2 什么是默认登录shell,如何改变指定用户的登录shell 答:在Linux操作系统,"/bin/bash"是默认登录shell,是在创建用户时分配的.使用chsh命令可以改变默认的shell.示例如下所示: # chsh <用户名&

【转】Linux Shell脚本面试25问

Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务. Q:2 什么是默认登录shell,如何改变指定用户的登录shell 答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的.使用chsh命令可以改变默认的shell.示例如下所示: # chsh <username> -