linux命令行程序设计,Linux 下的命令行编程(shell编程)

2019独角兽企业重金招聘Python工程师标准>>>

6936d1565ae689371725cdb5fc51c415.png

1. 调用.sh脚本

假如个有脚本文件test.sh

1)bash test.sh

2) source test.sh

3)sh test.sh

4)先授权test.sh为可执行程序 sudo chmod +X test.sh 然后执行:. test.sh

//网上写到可以用./test.sh 但我在ubuntu中执行./test.sh会报错,而用.test.sh 则正常

2. 变量:

* 定义:直接定义,前面不需要加什么符号:

name="haha"

注意:变量名和等号之间不能有空格

* 使用变量

使用的时候必须在前面加上$,定义的时候不能加

echo $name

或者:echo ${name}

* 只读变量(相当时常量) 不能修改,不能删除

readonly name="hi"

* 删除变量

unset name #注意,不能加$

* sh中的单双引号与php中差不多,

''内的$name当作字符串解析,,,但.sh中的单引号内不能出现单引号,加了转义符也不行

""中的$name会当作变量来解析

3. 字符串

* 直接拼接,不使用.或+

a="hello"

b="world"

c=$a$b

或c=${a}${b}

* 获取字符串的长度

len=${#a}

* 字符串的截取 ${string:start:length}

sub=${a:0:3} #截取前三个字符

#用 sh test.sh 会报错,用bash test.sh才行,原因是不同版本的bash实现有区别

* 替换 ${string/查找/替换}

rep=${a/o/ii} #把hello变成hellii

* 查找字符串中某个字符所在的位置 `expr index $a 'a'`

pos=`expr index $a 'e'` #返回 2

注意:

1.外层是`,而不是' (不是单引号,而是tab键上边的那个键)

2.位置是从1开始而不是从0开始

* 更多字符串的操作,见:

1. https://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html

2. http://justcoding.iteye.com/blog/1963463

4. 数组,不能定义多维数组

* 定义:(),元素之间有空格,不能加逗号

arr=(1 2 3 4)

* 读取:

echo arr[0]

* 获取长度

echo ${#arr[@]} 或 echo ${#arr[*]}

5. 运算符:http://www.runoob.com/linux/linux-shell-basic-operators.html

* 算数运算符

* 关系运算符

* 布尔运算符

* 字符串运算符

* 文件测试运算符

* 算数运算:

echo `expr 1 + 1 ' #2

注意:

1. 外层需要用反引号,而不是单引号

2. 以expr 开头

3. 运算符两侧要加空格1 + 1 而不是 1+1

4. 乘法是:`expr 2 \* 2 ` 而不是 `expr 2 * 2 `

5. mac 中的用法在linux中也适用:echo $(( 3 * 2)) #这种写法可以说不用\*

* 关系运算符:

包括 :-eq -ne -gt -lt -ge -le

left=8

if [ $left == 8 ]

then

echo "It is eight"

else

echo "Not eight"

fi

right=9

if [ $right -eq 9 ]

then

echo "It is nine"

else

echo "It is not nine"

fi

* 布尔与关系运算符

布尔:! 非 -o 或 -a 与 说明:-o or -a and

num=10

bnum=20

if [$num -eq 10 -o $bnum -eq 10]

then

echo "or"

else

echo "false"

if

关系:|| &&

if [[ $num == 10 || $bnum == 10 ]]

then

echo "|| or"

else

echo "false"

fi

注意:关系运算外层要两个中括号

了解更多:http://www.runoob.com/linux/linux-shell-basic-operators.html

6. 判断

* if 判断

if condition

then

dothing......

elif

dothing.....

else

dothine....//不能为空

fi //结束if语句,必须

condition 通常会用[]包住

* case 选择语句

num="hello"

case $num in

hi) echo "hi"

;;

hello) echo "hello"

;;

world) echo "world"

;;

*) echo "other"

;;

esca //结束case(反着写即结束,和if/fi 类似)

7. 循环

* for 循环

for i in 1,2,3,4

do

echo $i

done

for i in "hello world"

do

echo -e $i "\n"

done

//疑问:只在最后打印了换行符,为什么?

*while 循环 (until循环使用方法差不多,一般用while)

int=1

while(( $int<=5 )) //这里要加(())

do

echo $int

let "int++" //let 用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量

done

* 无限循环

while :

do

echo -e "99\n"

done

或者:

while (( a==1))

do

echo -e "99\n"

done

* break 和 continue 与其它编程语言中使用方法一致

8. 函数:

8.1 定义:

test(){

echo "test"

}

问题:资料上说可以用function test(){}定义,但测试后提示语法错误

8.2 调用

直接写函数名,不需要加括号

8.3 返回值

直接 return ,如果不写return,系统会自动返回最后一句的结果

8.4 获取返回值

不是通过赋值,而是在函数执行后用 $? 获取返回值

re(){

return "99"

}

re

echo "I am return" $?

//只能返回0-255的数字

8.5 传参

param(){

echo "first name:" $1

echo "second name:" $2

}

param "first" "middle"

大于9的参数,通过${num} 来获取

$* 获取所有参数

param2(){

echo "all:" $*

}

param2 "hello" "world" "linux" "!"

param3(){

echo "all:" $@

}

param3 "hello" "world" "linux" "!"

9. 获取用户输入

read str

echo $str //把用户输入的内容赋值给str变量

10. 把数制输出为文件而不直接显示

//用 >

echo "hello world">hello.txt

cat hello.txt

//返加内容,用 >>

echo "hello linux">>hello.txt

cat hello.txt

11. 包括其它文件

* .+文件名引入

. ./inc.sh

#inc.sh

url="http://www.baidu.con"

#test.sh

. ./inc.sh

echo $url

疑问:网上说可能通过 # source ./inc.sh 方式引入文件,但实测发现不行,不知为什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值