b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

Shell脚本编程总结及速查手册

电脑杂谈  发布时间:2019-09-07 09:07:13  来源:网络整理

shell 编程 if_shell if语法_shell编程 if

Shell是一种编程语言, 它像其他编程语言如: C, Java, Python等一样也有数组/函数/运算符/if语句/循环控制/… 但在起初之前, 我想先理清Shell语言与Shell之间的关系.

上面说了Shell是一种编程语言但你也许也听说过:sh/bash/csh/zsh/…它们也叫Shell, 实际上这里所说的Shell是一种应用程序, 它负责解释执行你撰写的Shell脚本, Mac默认就自带了sh/bash/csh/zsh/tcsh/ksh, 你可以这么查看cat /etc/shells

不同的shell的用法基本相似, 但有些shell提供了一些新特点, 比如我今天在用的就是zsh, 更多zsh的内容可以去看这篇文章。

#! /bin/sh
echo "hello shell!"

依国际惯例这里以在终端里打印一句hello shell!开始, 第一行的#!是一个约定标记, 它告诉脚本这段脚本必须什么解释器来执行. 第二行的echo命令则负责向屏幕上输出一句话.

运行shell程序有3种方法:

chmod +x使文件带有可执行权限, 直接运行直接读取寄存器, 将脚本文件成为参数传入 (比如bash hi.sh)使用source(也只用 . 代替)执行文件

通常状况下, 最方便的方法就是方式1, 通过形式1执行你必须在脚本第一行写好这段脚本由什么解释器来解释, 而借助形式2来执行则没有这个限制, 写了也没用.

除此之外方式1与方法2执行命令就没有区别了, 但方法3执行的形式与前两种都不同:

使用source执行shell脚本时, 不会创建子进程, 而是在父进程中直接执行!

这里不作更多解释, 感兴趣的朋友可以去参考Linux Shell编程从入门到精通这本书的第一章的相关部分.

和其他语言一样Shell中还有变量, 而且更简单, 但有一些非常特殊的地方.

Shell中的数组只有字符串这一种类型Shell中函数名与变量值没有长度限制Shell的变量也允许非常操作和整数操作, 只要函数中的字符串为数字

variable_name=ghui

需要切记:=两边不能加括号, 当赋值语句包含括号时请加引号(单引号/双引号均可)比如:

variable_name="ghui's blog"

Shell中的变量可以分为两种类别:

shell编程 if_shell if语法_shell 编程 if

局部变量 (定义函数时在后面加local修饰符)全局函数 (定义数组时不加任何修饰符)

与其他语言一样局部变量的可见范围是代码块或数组内, 全局函数在全局范围内可见.看个简单的举例:

#! /bin/sh
num=111 #全局变量
 
func1()
{
  local num=222 #局部变量
  echo $num
}
 
echo "before---$num"
func1
echo "after---$num"

输出:

before---111
222
after---111

使用一个定义过的变量, 只要在变量名后面加$即可, 如:

name=ghui
echo $name
echo ${name} #{} 为了帮助解释器识别变量边界, 非必须

在使用变量时也有一个地方还要留意, 请看上面的举例:

#! /bin/sh
str='abc'
echo "1 print $str"
echo '2 print $str'

输出:

1 print abc
2 print $str

即:

被双引号括出来的变量会出现数组替换, 单引号不会

Shell中注解使用#, 而且它不支持多行注释.

name="shell"
sayHi="hello, "$name" !"
sayHi2="hello, ${name} !"
echo $sayHi $sayHi2

注意:上面说的单双引号引起的变量替换问题

string="abcd"
echo ${#string} #输出:4

shell编程 if_shell 编程 if_shell if语法

str="hello shell"
echo ${str:2}  #输出: llo shell
echo ${string:1:3} #输出:ell

更多关于字符串的操作可以看这个

基本语法结构:

if condition
then 
	 do something
elif condition
then 
	do something
elif condition
then 
	do something
else
	do something
fi

其中, elif子句和else语句非需要的.看个示例:

#! /bin/sh
a=1
if [ $1=$a ]
then
	echo "you input 1"
elif [ $1=2 ]
then
	echo "you input 2"
else
	#do nothing
	echo " you input $1"
fi

很简单, 不过这儿有两个地方还要切记, 如果某个条件下的执行体为空, 则你就不能写这个条件 即上面那样会报错:

if condition
then 
	#do nothing
elif condition
then 
	# do nothing
#or
else
	#do nothing

另外,[ ]两边一定要加空格, 下面这种就会报错:

if [$a=$b]
#or 
if [ $a=$b]
#or 
if [$a=$b ]

只有这样if [ $a=$b ]才是对的.

注意:实际上这里的[]是test命令的一种形式,[是平台的一个内置命令,存在模式是/bin/[,它是读取test命令的标示shell 编程 if, 右中括号是关闭条件判定的标志, 因此以下的两个测试语句是等效的:

if test "2>3"
then
	...
fi

if [ "2>3" ]
then 
	...
fi

除[]之外, shell语言中也有几种其它括号, 比如: 单小括号/双小方框/双中括号/… , 不同的括号有不同的用法, 更多关于shell中, 括号的用法可以说说这个

当条件较好时, 可以选用使用switch子句, shell中的switch子句的写法和其他语言而是有些不同的, 基本结构如下:

shell 编程 if_shell编程 if_shell if语法

case expression in
	pattern1)
		do something... ;;
	pattern2)
		do something... ;;
	pattern2)
		do something... ;;
	...
esac

看个例子:

#! /bin/sh
input=$1
case $input in
        1 | 0)
        str="一or零";;
        2)
        str="二";;
        3)
        str="三";;
        *)
        str=$input;;
esac
echo "---$str"

这个示例会按照你执行此脚本时传入的参数不同在屏幕上输出不同的值, 其中第一个case1 | 0代表逻辑或.

NOTE:

;;相当于其它语言中的break每个pattern之后记得加)最后记得加esac(即反的case)

基本结构:

for name [in list]
do
	...
done

其中,[]括起来的in list, 为可选部分, 如果省略in list则默认为in "$@", 即你执行此命令时传入的参数列表.

看个例子:

for file in *.txt
do
	open $file
done

遍历当前目录下的所有txt文件, 并依次开启.

基本结构:

while condition
do
	do something...
done

看个例子:

#! /bin/sh
i=0
while ((i<5));
do
	((i++))
	echo "i=$i"
done

输出:

shell 编程 if_shell if语法_shell编程 if

i=1
i=2
i=3
i=4
i=5

NOTE:你也许应该去认识一下(())的用法

基本结构

until condition
do
	do something...
done

看个例子:

#! /bin/sh
i=5
until ((i==0))
do
	((i--))
	echo "i=$i"
done

输出:

i=4
i=3
i=2
i=1
i=0

shell中也支持break跳出循环,continue跳出本次循环.用法与C,Java中同样

要定义一个函数shell 编程 if, 可以使用以下两种方式:

function funcname()
{
	do something
}

或者

funcname ()
{
	do something
}

看个例子

#! /bin/sh
# ad.sh 计算sum
add()
{
	let "sum=$1+$2"
	return $sum
}
 
add $1 $2
echo "sum=$?"

输入

ad 1 2

输出


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-122011-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 李震
        李震

        既然同性如此重口的事都能想到去合法化了

      • 李晓倩
        李晓倩

        别人没反应的吗

      热点图片
      拼命载入中...