shell基础

来源:互联网 发布:数据维护专员招聘 编辑:程序博客网 时间:2024/06/04 20:42

1. #!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序

2. 变量命名规则:

首个字符必须为字母(a-z,A-Z)

中间不能有空格,可以使用下划线(_)

不能使用标点符号

不能使用bash里的关键字(可用help命令查看保留关键字)

3. 为了正确使用变量,推荐给所有的变量均加上括号。

赋值的时候不加美元符,引用的时候才加。

只读变量指令为readonly para

删除变量指令为unset para,变量被删除后不能再次使用。unset 命令不能删除只读变量。

变量类型主要分局部变量和环境变量,以及shell变量。

4. Shell字符串使用:

①单引号:单引号里的任何字符都会原样输出单引号字串中不能出现单引号(对单引号使用转义符后也不行)

②双引号:双引号里可以有变量双引号里可以出现转义字符。

拼接字符串:strcat_1="hello, ${your_name} !"

获取字符串长度加#echo ${#string}

提取字符串:echo ${string:2:5}   从第二个字节开始,五个字符

查找字符串:echo `expr index "$string" is`   "`" 是反引号1前面,而不是单引号 "'"),查找字母i或者s的位置。

 

4.shell数组:用括号来表示数组,数组元素用"空格"符号分割开。

数组名=(值1 值2 ... 值n)

读取数组:${数组名[下标]}

获取所有数组元素:${array_name[@]}

获取数组长度length=${#array_name[@]} 或者${#array_name[*]}

④获取单个元素长度:length=${#array_name[n]}

 

5.shell传递参数

脚本传递参数获取参数的格式为:$n其中 $0 为执行的文件名$1为第一个参数

特殊字符含义:

$# 参数个数。

②$* 单字符串显示所有参数,如"$1 $2 … $n"

$@ 单字符加””显示所有参数,如"$1" "$2" … "$n" 

$? 命令退出状态。

 

6.shell基本运算符

算数、关系、布尔、字符串、文件测试运算符。


①算数运算通过expr、awk来实现,注意表达式和运算符之间要有空格完整的表达式要被 ` ` 包含。如value=`expr $a + $b`

常用运算符有+、-、*、/、%、=、==、!=,注意*必须写成\*才是乘法条件表达式要放在方括号之间,并且要有空格,例如 [ $a == $b ]。

②关系运算符:只支持数字,常用的有-eq相等、-nq不相等、-gt大于、-lt小于、-ge大于等于、-le小于等于。例如if [ $a -eq $b ],在if、[]、-eq和变量之间都有空格。

③布尔运算符有!非、-o或、-a与。例如[ ! false ] [ $a -lt 20 -a $b -gt 100 ]。

④逻辑运算符有&&和、||或。例如[[ $a -lt 100 && $b -gt 100 ]]

字符串运算符有=相等、!=不相等、-z长度为0、-n长度不为0、[ $str ]字符串为空。例如[ $a = $b ] [ -z $a ] [ $a ]

⑥文件测试运算符有-b块设备、-c字符设备、-d目录、-f普通文件、-p有名管道、-r可读、-w可写、-x可执行、-s文件为空、-e是否存在。例如if [ -e $file ]if [ -d $file ]

 

7.echo指令

显示换行echo -e "Ok! \n" # -e 开启转义

显示不换行echo -e "Ok! \c" # -e 开启转义 \c 不换行

③显示结果到定向文件echo "It is test" > file1。

原样输出用’’单引号echo ‘$name\"’

⑤显示执行命令用``(1前面的符号)echo `date`

 

8.printf指令

printf 使用引用文本或空格分隔的参数,外面可以在printf中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。

默认printf不会像 echo 自动添加换行符,我们可以手动添加 \n。

单引号和双引号效果一样,例如printf '%d %s\n'2 "abc"

③转义有\b后退、\c抑制换行忽略后面内容、\n换行、\r回车。

 

9.test指令

test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。


①数值测试:-eq等于、-ne不等于、-gt大于、-lt小于、-ge大于等于、-le小于等于,例如if test $[num1] -eq $[num2]

②字符串测试:=等于、!=不等于、-z长度为0、-n长度不为0为真,例如if test $num0 = $num1。

③文件测试:-e文件存在、-r/w/x文件存在且可读写执行、-s文件存在且文件不为空、-d/f/c/b文件存在且为目录/普通文件/字符文件/块文件,例如if test -e ./bash

④支持逻辑运算符:与( -a )、或( -o )、非( ! ),例如if test -e ./notFile -o -e ./bash

 

10.流程控制

①if else

if condition1

then

command1

elif condition2

then

command2

else

commandN

fi

 

②for循环 当变量值在列表里,for循环即执行一次所有命令,使用变量名获取列表中的当前取值n列表可以包含替换、字符串和文件名

for var in item1 item2 ... itemN

do

command1

command2

...

commandN

done

③while循环 while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件

while condition

do

command

done

    例如:

ind=1

while(( $ind<=5 ))

do

        echo $ind

let "ind++"

done

④无限循环

while :while true

do

command

done

   或for (( ; ; ))

⑤until循环:至少执行一次。

until condition

do

command

done

⑥case指令

case 值 in

模式1)

    command1

    command2

    ...

    commandN

;;

模式2)

    command1

    command2

    ...

    commandN

;;

esac

⑦跳出循环

break:break命令允许跳出所有循环(终止执行后面的所有循环)

continue:不会跳出所有循环,仅仅跳出当前循环

 

11.函数

①可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。

②参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)。

③函数返回值在调用该函数后通过 $? 来获得。

④函数参数:通过 $n 的形式来获取参数的值,$1表示第一个参数,当n>=10时,需要使用${n}来获取参数特殊字符:$#传递参数个数、$*单字符显示所有传递参数、$@双引号返回每个传递参数、$?显示最后命令的退出状态。

 

12.输入输出重定向

①command > file输出重定向

②command < file输入重定向

③command >> file追加重定向

④n > file文件描述符为n重定向到file

⑤n >& m输出文件m/n合并

⑥n <& m输入文件m/n合并。


例如:command 2 > filestderr 重定向到 file

command > file 2>&1      stdout 和 stderr 合并后重定向到 file

command < file1 >file2   stdin 和 stdout 都重定向

command > /dev/null 执行某个命令,但又不希望在屏幕上显示输出结果

 

13.文件包含

. filename   # 注意点号.和文件名中间有空格  source filename

   例如:

tst1.sh 代码如下

www="www.123.com"


tst2.sh 代码如下:

. ./tst1.sh

echo "地址$www"


   打印结果:

地址www.123.com

 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击