shell 变量 判断 循环

 

export 用于修改或打印环境变量,readonly则使得变量不得修改。

           -p 打印      export name[=word].....              export -p         readonly name[=word] ....

实现最严格的可移植性:

             FOO=somevalue

             export FOO

              因商用UNIX系统里的/bin/sh,仍然不是POSIX兼容版本。

export命令仅将变量加到环境中,如果要从程序的环境中删除变量,则要用env命令,env也可临时地改变环境变量值:

              env -i PATH=$PATH HOME=$HOME LCALL=C awk '...' file1 fle2

             -i 选项是用来初始化(initializes)环境变量的,也就是丢弃任何的继承值,仅传递命令行上指定的变量给程序使用。

unset full_name 删除full_nanme变量

unset -v first middel last   删除其他变量

unset -f functionname   删除函数

 

${varname:-word} 如果varname存在且非null,则返回其值;否则,返回word

${varname:=word} 如果varname存在且不是null,则返回它的值;否则,设置它为word,并返回其值。

${varname:?message}

${varname:+word} 如果存在且非NULL,则返回word,否则null

 

${variabl#pattern}  如果模式匹配于变量值得开头处,则删除匹配的最短部分,并返回剩下的部分。

path=/home/tolstoy/mem/long.filename

${path#/*/}     结果:/tolstoy/mem/long.filename

 

shell 位置参数:

      从$0~~$ 9 ,大于9时,用${10}

 

POSIX内置的shell变量

#         目前进程的参数个数。

@        传递给当前进程的命令行参数,置于双引号内,会展开为个别的参数。

*           当前进程的命令行参数。置于双引号内,则展开为一单独参数。

 

?         前一命令的退出状态

$           shell进程的进程编号

0            shell程序的名称

!             最近一个后台命令的进程编号。依次方式存储进程编号,可通过wait命令以供稍后使用。

ENV       一旦引用,则仅用于交互式shell中

IFS         内部的字段分隔器

LANG

LC_ALL

LC_COLLATE

LC_CTYPE

LC_MESSAGES

LINENO

NLSPATH

PATH

PPID

PS1

PS2

PS4

PWD

 

POSIX的结束状态

0                 命令成功地退出。

>0               在重定向或单词展开期间

1-125           命令不成功退出

126               命令找到了,但文件无法执行。

127               命令找不到

>128              命令因受到信号而死亡

 

 

 

 

if -elif-else-fi

if  pipeline

     [pipeline...]

then

      statements

[ elif pipeline

        [ pipeline ...]

then

        statements-if-true-2

...]

[ else

        statements ]

fi

 

test 命令

test命令可以处理shell脚本来的各类工作。接受各种不同的参数,

test命令有另一种形式:[...]

if test "$str1" = "$str2"

then

          .....

fi

=========

if [ "$str1" = "$str2" ]

then

       ......

fi

 

test表达式

-b file       file是块设备危机

-c file        file是字符设备文件

-d  file        file是目录

-e file          file存在

 

-f file           一般文件

-g file          

-h

-L

-n

...............

s1 !=s2          字符串s1与s2不相同

n1 -eq n2        整数n1等于n2

      -ne            不等于

      -lt                小于

       -gt               大于

       -le                小于或等于

        -ge             大于或等于

 

case $1 in

-f)

  ...............

 ;;;;

-d | --directory)

   ............

    ;;

*)

    echo $1:unkown

    exit 1

esac

 

for循环里的in列表(list)是可选的,如果省略,shell循环会遍历整个命令行参数。

 

while condition

do

  statments

done

 

until condition

do

   statements

done

while与until唯一的不同之处在于,如果对待condition的退出状态。只要condition是成功退出,while会继续循环,只要condition未成功结束,until则执行循环。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Shell脚本中,循环结构(如for循环和while循环)被用来重复执行相同或类似的命令或操作。循环中使用的变量是在循环内部定义的,它们的作用域仅限于该循环。 在for循环中,变量通常被用来迭代一个定长的列表或范围。在循环的每次迭代中,变量会被赋予列表中的下一个值,然后执行循环体中的命令。循环结束后,变量的值不再存在。 例如,以下是一个简单的for循环示例: ``` for fruit in apple banana orange do echo "I like $fruit." done ``` 在这个例子中,变量`fruit`被用来迭代列表中的水果名称。循环体中的`echo`命令会打印出相应的句子。每次循环时,`fruit`变量的值会依次是"apple"、"banana"和"orange"。当循环结束后,`fruit`变量不再存在。 类似地,在while循环中,变量通常用于判断循环是否应该继续执行。在循环的每次迭代中,条件被检查,如果为真,则执行循环体中的命令。如果在循环体内部改变变量的值,对其后续迭代没有影响。 例如,以下是一个简单的while循环示例: ``` count=0 while [ $count -lt 5 ] do echo "Count: $count" count=$((count + 1)) done ``` 在这个例子中,变量`count`被用于判断循环是否应该继续执行。只要`count`小于5,循环就会一直执行。在循环体中,首先打印出当前的`count`值,然后将其增加1。注意,`count=`的操作用于将`count`变量设置为0。 总之,Shell循环中的变量作用域仅限于循环本身,循环结束后变量的值不再存在。这使得我们可以方便地在循环中使用变量来迭代列表、判断循环条件等操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值