Linux Shell 基本语法

一. Linux基本命令

1.1.  cp命令

该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,功能十分强大。

语法: cp [选项] 源文件或目录 目标文件或目录

1.2. mv命令

用户可以使用mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。

语法:mv [选项] 源文件或目录 目标文件或目录

1.3. rm命令

用户可以用rm命令删除不需要的文件或者目录。

语法:rm [选项] 文件

如果没有使用- r选项,则rm不会删除目录。

1.4. mkdir和rmdir

语法:mkdir [选项] dir-name

语法:rmdir [选项] dir-name

1.5. cd 命令

功能:改变工作目录。

语法:cd [directory]

1.6. ls 命令

ls是英文单词list的简写,其功能为列出目录的内容。该命令类似于DOS下的dir命令。

语法:ls [选项] [目录或是文件]

1.7. su命令

这个命令非常重要。它可以让一个普通用户拥有超级用户或其他用户的权限,也可以让超级用户以普通用户的身份做一些事情。普通用户使用这个命令时必须有超级用户或其他用户的口令。

该命令的一般形式为: su [选项] [使用者帐号]

1.8. ps命令

显示系统中执行的程序。

语法:ps [选项]

1.9. kill命令

删除执行中的程序

语法:kill [选项] PID

1.10. grep命令

搜寻输出的特定文字

语法:grep 字符串

例:

ps aux | grep matlab

kill PID

1.11. echo命令

echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。

该命令的一般格式为: echo [ -n ] 字符串

1.12. clear命令

clear命令的功能是清除屏幕上的信息,它类似于DOS中的 cls命令。清屏后,提示符移动到屏幕左上角。

二. Shell的基本知识

2.1. shell提示符及其环境

提示符:$

环境:Linux,Unix,Dos等等

 Shell其实就是一个解释执行命令的程序,所谓shell编程其实就是用一定的语法将各种基本的命令组合起来,让shell程序去解释执行。

同传统的编程语言一样,shell提供了很多特性,这些特性可以使你的shell script编程更为有用,如:数据变量、参数传递、判断、流程控制、数据输入和输出,子程序及以中断处理等。

2.2 如何执行shell程序

Shell程序(***.sh)

 执行这个命令时

(1) #./***.sh

(2) #chmod u+x ***.sh

#***.sh

(3) #sh ***.sh

2.3 常量

 字符串,例如“Hello World!”。

 数字,例如705,23。

2.4 变量

shell编程中它们是没有类型的,简称弱类型编程语言,在这个变量中可以保含一个数字,一个字符串,一个单词等。你并不需要声明这个变量,它会在引用这个变量时创建它。

 	STR="Hello World!" 
 	echo $STR 
 	  HOME="/home"                //注意赋值不要有空格 
 	  a=123 
 	  HOME_LIST=$(ls /home) //把命令的执行结果赋值给变量 
 	  ehco $HOME                   //$ 符号是获得变量HOME的值 
 	  a=a+1 

系统变量:

  $0 这个程序的执行名字

  $n  这个程序的第n个参数值,n=1...9

  $*  这个程序的所有参数

  $# 这个程序的参数个数

  $$ 这个程序的PID

  $! 执行上一个背景指令的PID

$? 上一个指令的返回值

2.5 局部变量

局部变量一般是指写在函数中的变量,他的生命力是有限的。局部变量比较好理解,这里就不再多介绍了。

2.6 从键盘输入变量值

使用read命令

read var1 var2 … varn

2.7 注释

Shell编程中的注释以#开头

2.8 数字运算

主要是指整数运算。expr命令可以将字符型变量转换为整数进行操作

语法:expr integer operator integer

其中operator为+ - * / %, 但对*的使用要用转义符/,如:

 	[oracle@localhost ~]$ more dvd.sh 
 	#!/bin/bash 
 	expr 5 /* 5 
 	[oracle@localhost ~]$ sh dvd.sh 

25

2.9 逻辑运算

test进行逻辑运算,用[ ]括起来就是test运算

 	int1 -eq int2 相等? 
 	int1 -ne int2 不等? 
 	int1 -gt int2 int1 > int2 ? 
 	int1 -ge int2 int1 >= int2 ? 
 	int1 -lt int2 int1 < int2 ? 
 	int1 -le int2 int1 <= int2 

2.10 双引号及单引号

 	$echo "$HOME $PATH"  -- 显示变量值 
 	/home/hbwork opt/kde/bin:/usr/local/bin: 
 	 $echo '$HOME $PATH'  -- 显示单引号里的内容 
 	$HOME $PATH 

2.11 空格

由于shell对命令中的多余的空格不作任何处理 ,而用引号括起来则可以防止shell去掉这些空格。

 	$ str1=abcd 
 	$ str2="abcd " 

2.12        分支结构

2.12.1 结构一

 	if [ variable = value ] 
 	then 
 	command 
 	else 
 	if [ variable = value ] 
 	then 
 	command 
 	else 
 	command 
 	fi 

2.12.2 结构二

 	if [ variable = value ] 
 	then 
 	command 
 	elif [ variable = value ] 
 	then 
 	command 
 	fi 

if 语句示例:

 	if [ "22" -lt "33" ]   then   //注意空格 
 	  echo "22 less than 33" 
 	  else 
 	  echo "no" 
 	fi                                  //if语句的结束 

2.13 Case语句

 	case value in 
 	pattern1) 
 	command;; 
 	pattern2) 
 	command;; 
 	... 
 	patternn) 
 	command; 
 	esac 

case 示例:

 	  echo "enter a number" 
 	  read ans                    //读取一个变量read 
 	  case $ans in 
 	  1) 
 	  echo   "you numer is $ans" 
 	  ;;                                //注意符号是两个 ; 
 	  2) 
 	  echo "you number is 2" 
 	  ;; 
 	  [3-9]) 
 	  echo "you number is $ans" 
 	  ;; 
 	  *)                                   //*通配符 
 	  echo "others" 
 	esac 

2.14 And 和 Or

 	command1 && command2 
 	 command1 || command2 

2.15 循环语句

2.15.1 For循环

 	for var in arg1 arg2 ... argn 
 	do 
 	command 
 	.... 
 	command 
 	done 

For循环示例

 	int=1 
 	for $int in 1 2 3 4 5 
 	do 
 	sq=`expr $int /* $int` 
 	echo $sq 
 	int=`expr $int + 1` 
 	done 

2.15.2 while循环

 	while command 
 	do 
 	command 
 	command 
 	command 
 	... 
 	Done 

While循环的示例

 	int=1 
 	while [ $int -le 5 ] 
 	do 
 	sq=`expr $int /* $int` 
 	echo $sq 
 	int=`expr $int + 1` 
 	done 

2.15.3 until循环结构

 	until command 
 	do 
 	command 
 	command 
 	.... 
 	command 
 	done 

Until循环示例

 	 int=1 
 	until [ $int -gt 5 ] 
 	do 
 	sq=`expr $int /* $int` 
 	echo $sq 
 	int=`expr $int + 1` 
 	done 

2.16 从循环中退出: break和continue命令

break 立即退出循环

continue 忽略本循环中的其他命令,继续下一下循环

2.17 函数 (子过程)

 	funcname() 
 	{ 
 	command 
 	... 
 	command; #分号 
 	} 

函数示例

 	setup () 
 	{ command list ; } 
 	do_data () 
 	{ command list ; } 
 	setup 
 	do_data 

2.18  shell程序的调试

 使用-x进行跟踪执行,执行并显示每一条指令。

2.19 比较运算符

2.19.1 文件比较运算符

  -e filename        如果 filename 存在,则为真            [ -e /var/log/syslog ]

  -d filename       如果 filename 为目录,则为真       [ -d /tmp/mydir ]

  -f filename        如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ]

  -L filename        如果 filename 为符号链接,则为真   [ -L /usr/bin/grep ]

  -r filename          如果 filename 可读,则为真              [ -r /var/log/syslog ]

  -w filename        如果 filename 可写,则为真            [ -w /var/mytmp.txt ]

  -x filename         如果 filename 可执行,则为真           [ -L /usr/bin/grep ]

  filename1 -nt filename2 如果 filename1 比 filename2 新,则为真 [ /tmp/install/etc/services -nt /etc/services ]

  filename1 -ot filename2 如果 filename1 比 filename2 旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]

2.19.2 字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)

  -z string               如果 string 长度为零,则为真          [ -z "$myvar" ]

  -n string              如果 string 长度非零,则为真               [ -n "$myvar" ]

  string1 = string2 如果 string1 与 string2 相同,则为真 [ "$myvar" = "one two three" ]

  string1 != string2 如果 string1 与 string2 不同,则为真 [ "$myvar" != "one two three" ]

2.19.3 算术比较运算符

  num1 -eq num2                 等于                            [ 3 -eq $mynum ]

  num1 -ne num2                不等于                         [ 3 -ne $mynum ]

  num1 -lt num2                    小于                            [ 3 -lt $mynum ]

  num1 -le num2              小于或等于                       [ 3 -le $mynum ]

  num1 -gt num2                    大于                            [ 3 -gt $mynum ]

  num1 -ge num2               大于或等于                     [ 3 -ge $mynum ]

三. Shell 的一些注意事项

3.1. 基础

  #!/bin/bash   //bash脚本第一句都是这个,他会让系统指定以bash来解释这个脚本

#                 //shell脚本注释符号

3.2. 变量

变量赋值的时候"="两边的内容要紧靠"="

例如:sum=0,写java写的时间长了总喜欢写成sum = 0,但是这样的结果是编辑器不识别

3.3. 在使用if、while时,在注意变量与符号之间的分割

例如:if [ `expr $a % 3` -ne 0 ],while [ "$var" != "end" ],尽量分开写,这样也挺好看也便于识别。

3.4.  let的意思是让"="后面的内容做算术运算,例如:let x=a-b

3.5. 大多数情况下,可以使用测试命令来对条件进行测试,比如可以比较字符串、判断文件是否存在及是否可读等等……通常用" [ ] "来表示条件测试,注意这里的空格很重要,要确保方括号前后的空格。

[ -f "somefile" ] :判断是否是一个文件

[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限

[ -n "$var" ] :判断$var变量是否有值

[ "$a" = "$b" ] :判断$a和$b是否相等

3.6 几个简单例子

 	  for filename in $(ls) 
 	  do 
 	  cat $filename 
 	  done 
 	  for((i=0; i<10; i++)) 
 	  do 
 	  echo $i 
 	  done 
 	  x=1 
 	  sum=0 
 	  while [ $x -le 10 ]  //注意[ ] 两边的空格 
 	  do 
 	  let sum=sum+$x   //shell中算术计算使用let 
 	  let x=x+1 
 	  done 
 	  echo $sum 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Linyb极客之路

并发编程之volatile关键字

一、Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的。 Java内存模型规定了所有的变量都存储在主内存中...

3595
来自专栏顶级程序员

你真的了解 volatile 关键字吗?

作者:Ruheng, www.jianshu.com/p/7798161d7472 一、Java内存模型 想要理解volatile为什么能确保可见性,就要先理...

3447
来自专栏程序员同行者

Linux三剑客之sed

1152
来自专栏大内老A

WCF服务端运行时架构体系详解[续篇]

终结点分发器在自己的运行时中对请求消息的处理最终肯定体现在相应操作的执行。如果从服务描述的角度来看,操作是一个OperationDescription对象。而服...

1926
来自专栏电光石火

Linux Shell 基本语法

该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,功能十分强大。

2016
来自专栏决胜机器学习

Redis专题(四) ——Redis排序、消息队列、优化存储

Redis专题(四) ——Redis排序、消息队列、优化存储 (原创内容,转载请注明来源,谢谢) 一、排序 1、命令 SORTkey [A...

6188
来自专栏salesforce零基础学习

salesforce lightning零基础学习(八) Aura Js 浅谈一: Component篇

我们在开发lightning的时候,常常会在controller.js中写 component.get('v.label'), component.set('v...

1192
来自专栏陈树义

Java并发编程:synchronized

Java并发编程:synchronized   虽然多线程编程极大地提高了效率,但是也会带来一定的隐患。比如说两个线程同时往一个数据库表中插入不重复的数据,就可...

3494
来自专栏与神兽党一起成长

使用FTP连接池封装工具类

早前的思路是将FTP连接的管理(对象池功能)与FTP工具类(上传下载方法)在一个工程中实现,在工具类中调用是模板类提供的模板方法, 由模板方法与对象池打交道——...

2912
来自专栏JavaQ

高并发编程-Condition深入解析

Condition接口位于java.util.concurrent.locks包下,实现类有 AbstractQueuedLongSynchronizer.Co...

984

扫码关注云+社区

领取腾讯云代金券