linux bash脚本shell基础

一、变量
1)变量名与等号之间不能有空格!!
2)引用到变量要用 $xxx

 str="hello world" 
 echo $str

3)变量名外面的花括号是可选的,加不加都行

echo ${your_name}

加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

推荐给所有变量加上花括号,这是个好的编程习惯。
4)readonly变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

readonly myUrl="www.baidu.com"

5)删除变量

unset variable_name

6)字符串
字符串可以用单引号,也可以用双引号,也可以不用引号。

但是单引号和双引号还是有区别的
单引号字符串的限制:
a)单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

a="hello"
str='123$a'
echo str

输出:123$a

b)单引号字串中不能出现单引号(对单引号使用转义符后也不行);

str='123\'$a\''  #出错

双引号的优点:
a)双引号里可以有变量
b)双引号里可以出现转义字符

your_name="lin"
str="Hello, I know your are \"$your_name\"! \n"
echo str

输出:Hello, I know your are "lin"!

获取字符串长度

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

提取子字符串

string="runoob is a great site"
echo ${string:1:4} # 输出 unoo

c)显示命令执行结果

echo \`date\`
注意: 这里使用的是反引号 `, 而不是单引号 '。
结果将显示当前日期
Thu Jul 24 10:08:46 CST 2014

7)数组
在Shell中,用括号来表示数组,数组元素用”空格”符号分割开。定义数组的一般形式为:
数组名=(值1 值2 … 值n) , 例如:

array_name=(value0 value1 value2 value3)
或者
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

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

valuen=${array_name[n]}

使用@符号可以获取数组中的所有元素,例如:

echo ${array_name[@]}

获取数组长度的方法与获取字符串长度的方法相同,例如:

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

二、循环
1) for循环:
for temp in 变量(或者执行语句);do
执行体
done

cmd=`ls /`
for temp in $cmd;do
    echo $temp
done

或者:

for temp in `ls /etc`;do
        echo $temp
done

三、参数

$#:传递到脚本的参数个数

$*:以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2$n"的形式输出所有参数。

$$:脚本运行的当前进程ID号

$!:后台运行的最后一个进程的ID号

$@:与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2""$n" 的形式输出所有参数。

$-:显示Shell使用的当前选项,与set命令功能相同。

$?:显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

四、运算符
a)数组判断:

-eq 检测两个数是否相等,相等返回 true。    [ $a -eq $b ] 返回 false-ne 检测两个数是否相等,不相等返回 true。   [ $a -ne $b ] 返回 true-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。   [$a -ge $b ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。   [ $a -le $b ] 返回 true。

!   非运算,表达式为 true 则返回 false,否则返回 true。  [ ! false ] 返回 true。
-o  或运算,有一个表达式为 true 则返回 true。  [ $a -lt 20 -o $b -gt 100 ] 返回 true-a  与运算,两个表达式都为 true 才返回 true。  [ $a -lt 20 -a $b -gt 100 ] 返回 false

b)字符串运算:
注意:数字判断为两个等号,字符串为一个

=   检测两个字符串是否相等,相等返回 true。  [ $a = $b ] 返回 false!=  检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true-z  检测字符串长度是否为0,为0返回 true。  [ -z $a ] 返回 false-n  检测字符串长度是否为0,不为0返回 true。 [ -n $a ] 返回 truestr 检测字符串是否为空,不为空返回 true。   [ $a ] 返回 true。
string="hello"

if [ $string = "hello" ]
then
        echo true
else
        echo false
fi

c)文件判断

-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),
        如果是,则返回 true。   [ -f $file ] 返回 true-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true-e file 检测文件(包括目录)是否存在,如果是,则返回 true。    [ -e $file ] 返回 true

五、判断
1)
if 语句语法格式:

if condition
then
    command1 
    command2
    ...
    commandN 
fi

或者

if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

if else 语法格式:

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

if else-if else 语法格式:

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

2)
while循环:

while (( condition ))
do
    command
done

无线循环:

while true
do
    command
done

3)
until 循环
until循环执行一系列命令直至条件为真时停止。
until循环与while循环在处理方式上刚好相反。
一般while循环优于until循环,但在某些时候—也只是极少数情况下,until循环更加有用。

until condition
do
    command
done

4)
case语句
case工作方式如上所示。取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

casein
模式1)
    command
    ;;
模式2)
    command
    ;;
模式3|模式4|模式5)
    command
    ;;
esac

六、read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量

#!/bin/sh
read name 

七、函数
1)

[ function ] funname [()]
{
    action;
    [return int;]
}

a、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
b、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
下面的例子定义了一个函数并进行调用:

demoFun(){
    echo "这是我的第一个 shell 函数!"
}
demoFun

下面定义一个带有return语句的函数:
函数返回值在调用该函数后通过 $? 来获得。

funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum$anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"

2)函数参数:
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 n n 的 形 式 来 获 取 参 数 的 值 , 例 如 , 1表示第一个参数,$2表示第二个参数。带参数的函数示例:

funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

输出结果:

第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

注意, 10 10 不 能 获 取 第 十 个 参 数 , 获 取 第 十 个 参 数 需 要 {10}。当n>=10时,需要使用${n}来获取参数。

八)Shell 文件包含
和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。

Shell 文件包含的语法格式如下:

. filename   # 注意点号(.)和文件名中间有一空格source filename
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值