shell 脚本语法
Linuxshell脚本语法
1. 第一行必须是"#!/bin/sh"
它不是注释,"#!/bin/sh"是对shell的声明,说明你所用的是那种类型的shell及其路径所在;如果没有声明,则脚本将在默认的shell中执行,默认shell是由用户所在的系统定义为执行shell脚本的shell.
如果脚本被编写为在Kornshellksh中运行,而默认运行shell脚本的为C shell csh,则脚本在执行过程中很可能失败。
所以建议大家就把"#!/bin/sh"当成C 语言的main函数一样,写shell必须有,以使shell 程序更严密。
2. 注释:一行开头为#
3. 定义变量
定义单变量
p_name='kang'
使用单变量
echo $p_name'.js' # 输出kang.js
echo $p_name.js # 输出kang.js
cp $p_name.js copy.js;
4. 逻辑符号
命令1 &&命令2:
如果左边的“命令1”执行成功,那么右边的“命令2”才会被执行。
命令1 || 命令2:
与&&相反。
如果“命令1”未执行成功,那么就执行“命令2”。
5. 接收参数
脚本文件“copy.sh”,其内容如下:
m=$1
n=$2
echo $m-$n
执行命令:“sh copy.sh 111 222”;输出111-222
6. 控制流:if/then/elif/else/fi
注意"["和"]"前后的空格必须有,否则提示错误
m="kang2"
if [ "$m" == 'kang' ]; then
echo 'kang'
elif [ $m == 'kang2' ]; then
echo 'kang2'
else
echo 'no'
fi
示例:判断文件夹
if [ -d './js' ]; then
echo 'js是文件夹'
fi
7. 循环:for/do/done
注意:循环项是以“空格”拆分的字符串
name="rain man's blog"
for loop in $name; do
echo $loop;
done
8. 格式化输出日期
curdate="`date +%Y%m%d%H%M%S`"
echo $curdate
执行结果:20110904175817
9. exist
退出当前shell脚本,一般来说,返回0表示执行成功,其他值表示没有执行成功。
exist 0 # 返回0
exist 1 # 返回1
10. 系统变量pwd=$PWD
pwd=$PWD # 当前目录
user=$USER # 当前用户
echo $pwd
echo $user
运行脚本后输出:
/home/rainman/test
rainman
11.$符号的常见用法
linux shell脚本中的美元符号$,是作为shell中特殊变量使用的,具体含义:
$0 shell的命令本身(包括完整路径)
$1到$9 数字表示shell 的第几个参数
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同。
$- 显示shell使用的当前选项。
$? 显示最后命令的执行状况。
0表示没有错误。
12.判断等于大于小于
-eq等于
-ne 不等于
-gt大于
-ge大于等于
-lt小于
-le 小于等于
13.export的用法
export 功能说明:设置或显示环境变量。
语法:export [-fnp][变量名称]=[变量设置值]
补充说明:在shell中执行程序时,shell会提供一组环境变量。
export可新增,修改或删除环境变量,供后续执行的程序使用。
export的效力仅限于该次登陆操作。
参数:
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。
变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。
shell语法 ;
在Shell脚本中,分号(;)用于分隔命令。
在大多数Shell环境中,分号的作用类似于换行符,可以将多个命令写在同一行上。
使用分号可以将多个命令链接在一起,使它们在同一个Shell会话中依次执行。
以下是一个使用分号的Shell脚本示例:
```bash
echo "Hello"; echo "World"
```
在上面的示例中,两个echo命令之间使用分号分隔。
当脚本执行时,它会先执行第一个echo命令输出"Hello",然后执行第二个echo命令输出"World"。
除了分号,还有其他几种方式可以分隔Shell命令:
1. 换行符:每个命令占据一行,这是最常见的分隔方式。
2. 管道符(|):将一个命令的输出作为另一个命令的输入。
3. 逻辑运算符(&& 和 ||):用于控制命令的执行顺序。
&& 表示前一个命令成功执行后才执行后一个命令,|| 表示前一个命令失败时才执行后一个命令。
需要注意的是,分号用于分隔命令,而不是连接命令。
如果需要将多个命令的输出连接在一起,可以使用输出重定向(>),或者使用命令替换($(command))。
shell中if else语法
在Shell脚本中,`if` 和`else` 是用于条件判断的关键字。
它们通常一起使用,以根据条件执行不同的操作。
基本的`if else` 语法如下:
```bash
if [ 条件]
then
# 如果条件为真,执行这里的代码
else
# 如果条件为假,执行这里的代码
fi
```
其中,`[ 条件]` 是要评估的条件表达式。
如果条件为真(即评估结果为非零),则执行`then` 之后的代码块;如果条件为假(即评估结果为零),则执行`else` 之后的代码块。
下面是一个示例:
```bash
#!/bin/bash
num=10
if [ $num -eq 10 ]
then
echo "数字是10"
else
echo "数字不是10"
fi
```
在上面的示例中,如果变量`num` 的值等于10,则输出"数字是10";否则输出"数字不是10"。
除了`-eq` 之外,还可以使用其他比较运算符,如`-ne`(不等于)、`-gt`(大于)、`-lt`(小于)等。
此外,还可以使用逻辑运算符`-a`(与)、`-o`(或)和`!`(非)来组合多个条件。
需要注意的是,在`[ ]` 之间应该有空格,并且在`[ ]` 两侧也应该有空格。
另外,还可以使用`[[ ]]` 语法来进行更复杂的条件判断和逻辑运算。
bash shell语法
bash shell语法Bash是一种Unix和Linux系统下的shell,也是类Unix系统中最常用的shell之一。
Bash shell语法是bash编程的基础。
它提供了一些操作符和语法规则,帮助你有效地编写shell脚本。
在这篇文章中,我们将介绍一些基本的Bash shell语法。
1.变量定义在Bash里,你可以使用变量来存储数据,变量名必须以字母或下划线开头,不能以数字开头。
变量赋值时,等号两边不能有空格。
例如:name="John"echo $name输出结果为:John2.条件语句在Bash中,你可以使用条件语句来判断表达式是否为真。
if语句是最常用的条件语句。
例如:if [ $name == "John" ]thenecho "Hello John"fi输出结果为:Hello John3.循环语句循环语句是Bash中另一个重要的语法结构。
while和for循环都是Bash中常用的循环语句。
例如:#while循环count=1while [ $count -le 10 ]doecho "Count is: $count"count=$((count+1))done#for循环for i in {1..5}doecho "The value of i is: $i"done以上循环语句会输出以下结果:Count is: 1Count is: 2Count is: 3Count is: 4Count is: 5Count is: 6Count is: 7Count is: 8Count is: 9Count is: 10The value of i is: 1The value of i is: 2The value of i is: 3The value of i is: 4The value of i is: 54.函数定义Bash中的函数和其他编程语言中的函数一样,它们可以接收参数并返回值。
常用shell脚本指令
常用shell脚本命令1、显示包含文字aaa的下一行的内容:sed -n '/aaa/{n;p;}' filename2、删除当前行与下一行的内容:sed -i '/aaa/{N;d;}' filename3、删除当前行与下两行的内容:sed -i '/aaa/{N;N;d;}' filename依次类推,删除三行,则为{N;N;N;d;},分析知:N为next4、得出以空格为分割的字符串中单词的个数,即统计个数:awk ' { print NF } '如显示字符串VALUE中的单词个数,其中VALUE为:aaa bbb ccc ddd ee f则执行 echo $VALUE | awk ' { print NF } ' 后的结果为65、在linux中建立一个文件与另一文件的链接,即符号链接ln -s /var/named/chroot/etc/named.conf named.conf这要就建立了当前目录的文件named.conf对/var/named/chroot/etc/named.conf 的符号链接。
即操作named.conf就意味着操作实际文件/var/named/chroot/etc/named.conf ,这时用ll命令查看的结果如:lrwxrwxrwx 1 root root 32 Mar 22 12:29 named.conf ->/var/named/chroot/etc/named.conf注意:当用sed来通过named.conf来删除一部分信息时,会将符号链接的关系丢掉,即会将named.conf变成一个实际文件。
所以需对实际文件进行删除操作。
6、显示指定字符范围内的内容:如:显示文件test.txt中字符#test begin与#test end之间所有的字符sed -n "/#test begin/,/#test end/p" test.txt或 awk "/#test begin/,/#test end/" test.txt在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则.1. 单引号和双引号的区别单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是普通字符,不会作变量的引用,直接输出字符窜。
shell的基础语法
shell的基础语法Shell是一种命令行解释器,它允许用户与操作系统进行交互并执行各种操作。
Shell的基础语法包括以下几个方面:1. 命令执行,在Shell中,用户可以直接输入命令来执行各种操作,例如`ls`命令用于列出当前目录下的文件和文件夹,`mkdir`命令用于创建新的目录等。
2. 变量,在Shell中,可以使用变量来存储数据并在需要的时候进行引用。
变量的赋值和引用使用类似于`variable_name=value`和`$variable_name`的语法。
3. 控制结构,Shell支持基本的控制结构,如条件判断和循环。
条件判断使用`if-then-else-fi`语法,而循环则可以使用`for`、`while`等关键字来实现。
4. 函数,Shell中可以定义和调用函数,使用`function_name() { ... }`的语法来定义函数,使用`function_name`来调用函数。
5. 管道和重定向,Shell支持管道和重定向操作,允许用户将一个命令的输出作为另一个命令的输入,或者将命令的输入/输出重定向到文件或其他设备。
6. 通配符,Shell支持通配符来匹配文件名,例如``用于匹配任意字符,`?`用于匹配单个字符等。
7. 注释,在Shell脚本中,可以使用`#`符号来添加注释,注释部分将被解释器忽略。
总的来说,Shell的基础语法包括了命令执行、变量、控制结构、函数、管道和重定向、通配符以及注释等内容。
掌握这些基础语法对于编写Shell脚本和在命令行下进行操作都是非常重要的。
希望这些信息能够帮助你更好地理解Shell的基础语法。
cshell语法
cshell语法Cshell是一种Unix Shell程序,主要用于在命令行界面下与操作系统进行交互。
Cshell语法是Cshell编程中必须掌握的一部分,它允许用户编写脚本来自动化一系列操作。
Cshell语法的基本结构与C语言类似,包含命令、参数和控制结构等。
以下是一些常用的Cshell语法:1. 命令和参数:Cshell中,命令和参数是以空格分隔的。
命令用来执行特定的任务,而参数用来给命令传递额外的信息。
例如,在Cshell中执行"ls -l"命令可以列出当前目录下的文件和文件夹,并显示详细信息。
2. 注释:在Cshell中,使用"#"符号来注释一行代码。
注释通常用来解释脚本的功能或提醒自己后续需要添加的代码。
例如,可以在脚本中添加注释,说明某一行代码的作用。
3. 变量:可以在Cshell中使用变量来存储值和临时数据。
变量名不需要预先声明,直接使用即可。
变量赋值使用"="符号,例如"var=100"。
使用变量时需要使用"$"前缀,例如"echo $var"将会输出"100"。
4. 控制结构:Cshell中提供了多种控制结构,用于根据条件执行不同的代码块。
常见的控制结构包括if语句、for循环和while循环。
if语句用于条件判断,for循环用于重复执行一段代码块,while循环用于在满足条件时执行一段代码块。
5. 输入和输出重定向:Cshell提供了输入和输出重定向的功能,允许用户将命令的输入和输出重定向到文件或其他设备。
输出重定向使用">"符号,例如"ls > output.txt"将目录列表输出到名为output.txt的文件中。
输入重定向使用"<"符号,例如"wc -l < input.txt"将会统计input.txt文件中的行数。
shell的for循环语句
shell的for循环语句Shell是一种命令行解释器,是 Unix 或 Linux 操作系统上最常用的脚本语言之一。
Shell 脚本可以用来自动化一些重复性工作,包括文件操作、系统管理、网络管理、进程管理等等。
而在 Shell 脚本中,for 循环语句是非常常用的控制语句之一。
for 循环语句的语法如下:```for 变量名 in 列表do命令序列done```其中 `变量名` 是一个用户定义的变量名,`列表` 是一个由空格或换行符分隔的字符串列表。
在循环开始时,`变量名` 被赋值为列表中的第一个值,然后执行 `命令序列`。
执行完 `命令序列` 后,`变量名` 被赋值为列表中的下一个值,然后再次执行 `命令序列`。
这个过程一直持续到列表中的所有值都被处理完毕。
下面是一个简单的 for 循环示例:```for i in 1 2 3 4 5doecho 'Number: $i'done```执行上述脚本会输出以下结果:```Number: 1Number: 2Number: 3Number: 4Number: 5```在这个示例中,`i` 是变量名,`1 2 3 4 5` 是列表。
在循环的每个迭代中,变量 `i` 的值被设置为列表中的一个元素。
然后,echo 命令使用这个变量来输出一条消息。
除了上面这种简单的列表形式外,for 循环还可以使用一些高级特性,比如使用通配符、指定步长、从文件中读取列表等等。
这些特性可以让 for 循环更加灵活和强大。
sh 文件语法
sh文件(Shell脚本)的语法
包括以下部分
1.注释:在sh文件中,以#开头的句子表示注释,直到这一行的结束。
注
释对于理解脚本的工作原理非常有帮助,即使长时间没有使用脚本,也可以通过注释快速了解其作用及工作原理。
2.变量:在sh文件中,变量可以用来存储数据,如文本字符串、数字或命
令的输出结果等。
变量名通常以字母或下划线开头,后面可以是字母、数字或下
划线。
使用变量时,需要用$符号引用变量的值。
3.条件测试:sh文件中的条件测试使用test命令,通过特定的表达式或命
令来评估条件是否成立。
例如,可以使用-f表达式来测试文件是否存在,或使用-x表达式来测试命令是否存在且具有可执行权限。
4.循环:sh文件中的循环可以使用for或while语句来实现。
for语句用
于遍历一组值,而while语句则用于重复执行一组命令,直到条件不再成立。
5.函数:sh文件中的函数可以定义一组可重用的代码块,通过函数名来调
用。
函数定义需要使用function关键字,并指定函数的参数和返回值。
6.控制结构:sh文件中可以使用if-else结构来实现条件分支,使用case
语句来实现多分支选择,以及使用break和continue语句来控制循环的流程。
7.输入输出:sh文件中的输入输出可以使用echo命令来输出文本信息,
使用read命令来从标准输入读取用户的输入,以及重定向符号(>、>>)来实
现输出重定向。
这些是sh文件的一些基本语法元素,可以帮助您编写和执行Shell脚本。
shell if 逻辑与条件
shell if 逻辑与条件Shell if 逻辑与条件简介Shell脚本是一种在UNIX系统中常用的脚本语言,用于批处理任务和自动化任务。
在Shell脚本中,使用if语句可以根据条件执行不同的代码块。
本文将介绍Shell if语句的基本用法和逻辑与条件。
基本用法Shell if语句的基本语法如下:if [ condition ]thenstatements1elif [ condition ]thenstatements2elsestatements3fi其中,condition是一个表达式,可以使用比较运算符、逻辑运算符和字符串比较进行判断。
then后面是条件成立时要执行的代码块,elif后面是其他条件的判断块,else后面是如果都不满足条件时要执行的代码块。
在Shell脚本中,条件可以是数值、字符串或文件等。
比如:if [ $num -gt 10 ]thenecho "Number is greater than 10."elseecho "Number is less than or equal to 10."fi上述代码中,$num是一个变量,-gt是比较运算符,表示大于。
如果$num大于10,则输出”Number is greater than 10.”,否则输出”Number is less than or equal to 10.”。
逻辑与条件Shell提供了逻辑运算符来进行多个条件的判断。
常用的逻辑运算符有:•-a:与运算,表示逻辑与关系,两个条件都为真时返回真;•-o:或运算,表示逻辑或关系,两个条件有一个为真时返回真;•!:非运算,表示逻辑非关系,条件为假时返回真。
例如,以下代码判断一个数字是否大于0且小于100:if [ $num -gt 0 -a $num -lt 100 ]thenecho "Number is between 0 and 100."elseecho "Number is not between 0 and 100."fi上述代码中,$num是要判断的数字,-gt和-lt分别表示大于和小于。
shell脚本中的4种循环语句使用
shell脚本中的4种循环语句使⽤1、for循环#语法结构#第⼀种:取值变量for变量名in变量取值表do指令done#例⼦:#⽰例for a in {1..9}domkdir dir$adone#第⼆种:C语⾔型for循环for ((exp1; exp2; exp3))do指令done#例⼦:#⽰例for ((i=1;i<=3;i++))doecho $idone#解释:i从1开始,当i<=3就可以运⾏,如果运⾏的值⼤于3,就退出循环#语法结构讲解for关键字后的双括号是三个表达式,第⼀个是变量初始化(例如:i=1),第⼆个为变量的范围(例如i<=3),第三个为变量⾃增或⾃减(例如i++)。
当第⼀个表达式的初始化值符合第⼆个变量的范围时,就进⾏如循环执⾏,当条件不满⾜时就退出循环#简单⽰例#1.竖向打印10 9 8 7 6 5⼏个数字#第⼀种⽅法:直接列出元素[root@game scripts]# cat for1.sh#!/bin/bashfor i in12345doecho $idone#效果[root@game scripts]# sh for1.sh12345第⼆种⽅法:使⽤⼤括号{}⽣成数字序列[root@game scripts]# cat for2.sh#!/bin/bashfor i in {1..5}doecho $idone#效果[root@game scripts]# sh for2.sh12345#第三种⽅法:使⽤seq⽣成数字序列[root@game scripts]# cat for3.sh#!/bin/bashfor i in `seq 15`doecho $idone#效果[root@game scripts]# sh for3.sh12345#2.获取当前⽬录下的⽬录或⽂件名,并将其作为变量列表打印输出#数据[root@game ~]# mkdir -p /test/{test1.txt,test2.txt,guo.txt,ke.txt}[root@game ~]# ls -l /test/total 0drwxr-xr-x. 2 root root 6 Aug 2122:14 guo.txtdrwxr-xr-x. 2 root root 6 Aug 2122:14 ke.txtdrwxr-xr-x. 2 root root 6 Aug 2122:14 test1.txtdrwxr-xr-x. 2 root root 6 Aug 2122:14 test2.txt#编写脚本[root@game scripts]# cat for4.sh#!/bin/bashusage(){echo "directory not found"}[ ! -d /test ] && usage && exit 1cd /testfor i in `ls`doecho $idone#效果[root@game scripts]# sh for4.shguo.txtke.txttest1.txttest2.txt2、while循环#while循环⼀般应⽤于守护进程程序或⼀直循环执⾏#语法格式while <条件表达式>do指令done#简单⽰例每隔2秒在屏幕上输出⼀次负载值[root@game scripts]# cat while1.shwhile truedouptimesleep 2 #暂停2秒再执⾏done#提⽰:while true表⽰条件永远为真,因此会⼀直运⾏,像死循环⼀样,称为守护进程#效果:每隔2秒就输出⼀次[root@game scripts]# sh while1.sh23:11:35 up 2 days, 2:00, 2 users, load average: 0.00, 0.01, 0.0523:11:37 up 2 days, 2:00, 2 users, load average: 0.00, 0.01, 0.0523:11:39 up 2 days, 2:00, 2 users, load average: 0.00, 0.01, 0.053、until循环#until循环是当条件表达式不成⽴时,就会进⼊循环,当条件表达式成⽴时,就会终⽌循环#语法格式until <条件表达式>do指令done#⽰例#如果⽤户输出的是guoke就符合条件,退出循环,如果不是,⽤户输⼊3次之后就退出循环[root@game scripts]# cat until1.sh#!/bin/bashi=1until [ "$user" = "guoke" -o "$i" -gt 3 ]doread -p "please enter you username:" userlet i++done#效果[root@game scripts]# sh until1.shplease enter you username:guoke[root@game scripts]# sh until1.shplease enter you username:1please enter you username:1please enter you username:1[root@game scripts]#4、select循环#语法格式select变量名in [菜单取值列表]do指令done#⽰例#第⼀种:直接使⽤列表字符串[root@game scripts]# cat select1.sh#!/bin/bashselect name in apache httpd nginx tomcatdoecho $namedone#效果[root@game scripts]# sh select1.sh1) apache2) httpd3) nginx4) tomcat#? 1#? 3nginx#? 4tomcat#? ^C#第⼆种:采⽤数组做变量列表[root@game scripts]# cat select2.sh#!/bin/basharray=(apache nginx tomcat lighttpd)select name in"${array[@]}"doecho $namedone#效果[root@game scripts]# sh select2.sh1) apache2) nginx3) tomcat4) lighttpd#? 3tomcat#? 4lighttpd#? ^C5.循环控制及状态返回值break (循环控制)continue (循环控制)exit (退出脚本)return (退出函数)#区别break continue在条件语句及循环语句(for if while等)中⽤于控制程序的⾛向exit是终⽌所有语句并退出脚本return:仅⽤于在函数内部返回函数执⾏的状态值#break⽰例#如果i等于3,那么就终⽌循环[root@game scripts]# cat break1.sh#!/bin/bashfor ((i=0;i<=5;i++))doif [ $i -eq 3 ];thenbreakelseecho $ifidoneecho "1111"yum install net-tools -y > /dev/null[ $? -eq 0 ] && echo "already install"#效果[root@game scripts]# sh break1.sh121111already install#说明:i等于3的时候就终⽌循环,但是没有跳出脚本#exit⽰例[root@game scripts]# cat exit1.sh#!/bin/bashfor ((i=0;i<=5;i++))doif [ $i -eq 3 ];thenexit 1fiecho $idoneecho "ok"#执⾏效果[root@game scripts]# sh exit1.sh12#说明:当i等于3的时候就会退出脚本了,就不会执⾏后⾯的语句#continue⽰例[root@game scripts]# cat con1.sh#!/bin/bashfor ((i=0;i<=5;i++))doif [ $i -eq 3 ];thencontinueelseecho $ifidoneecho "ok"#执⾏效果[root@game scripts]# sh con1.sh。
