shelll编程_1

来源:互联网 发布:mac qq多开 编辑:程序博客网 时间:2024/05/16 07:39

shell基础编程

1.变量

1.局部变量,每个shell都有自己的变量空间,局部变量的作用域被限定在他们的shell中,可以使用local命令来“显示”的声明局部变量

2.环境变量成为“全局变量”,子shell会继承父shell的环境变量

#!/bin/shVAR_02=100function fun(){    VAR_02=200}echo "Before function VAR_02:$VAR_02"funecho "after function VAR_02:$VAR_02"-----------------------------------output:Before function VAR_02:100after function VAR_02:200-----------------------------------#include<stdio.h>int VAR_02=100;void fun(void){    int VAR_02 = 200;}int main(){    printf("Before: %d\n",VAR_02);    fun();    printf("After: %d\n",VAR_02);}---------------------------------output:Before: 100After: 100

解释:在shell中以shell的进程ID作为一个命名空间,所以即使在函数中声明变量也会在全局生效,而c语言是对函数内的变量单独产生命名空间,为了解决shell的这个问题,可以在函数内以local显示声明

3.常见全局变量 http://www.cnblogs.com/Fallever/p/6880713.html

PATH 决定了shell将到哪些目录中寻找命令或程序

 
HOME 当前用户主目录

 HISTSIZE  历史记录数

 LOGNAME 当前用户的登录名

 HOSTNAME 指主机的名称

 SHELL    当前用户Shell类型

 LANGUGE  语言相关的环境变量,多语言可以修改此环境变量

 MAIL   当前用户的邮件存放目录

 PS1   基本提示符,对于root用户是#,对于普通用户是$

2.变量赋值和取消

#正确的,不可以加空格name=valuename="value"name="value value" #必须用双引号#定义name=valuename1="$name"ehco ${name1}  #使用echo $nameecho ${name} #推荐#取消变量unset nameunset function

3.数组,再次说明了shell变量是弱类型的

声明数组declare -a arrarr[0]=1arr[1]="hello"declare -a arr=("hello" "leo")#也可以不使用declareName=('leo' 'cat')#数组长度echo ${#Name[@]}echo ${#Name[*]}#数组中某个成员字符串的长度echo ${#Name[1]}#数组截取echo ${Name[@]:1,2}echo ${Name[1]:1,2} #数组成员字符串的取#连接数组New=(${Name[@]} ${Name[@]})#数组替换Array=(${Name[@]/Lilo/cat})#取消数组unset Array

4.算术运算

使用$[]运算

使用let i=1+1

使用expr i = 1 + 1

2.判断和测试

test file_operator FILE

[ file_operator FILE ]

2.1 文件测试

test -e /var/log/messageecho $?[ -e /var/log/message ]echo $?    

- -b FILE  当文件是块文件时返回真
- -c FILE  当文件是字符设备时返回真
- -d FILE  当文件是目录时返回真
- -d FILE  当文件是目录时返回真
- -e FILE  当文件存在时返回真
- -x FILE  当文件是可执行文件时返回真
- -w FILE  当文件是可写文件是返回真
- -r FILE  当文件是可读文件时返回真
- -s FILE  当文件大小不为0返回真
- -k FILE  当文件包含sticky时返回真

2.2 字符串测试

str1="leo"str2="cat"test -z "${str1}" echo $?[ str1!=str2 ]echo $?
  • -z “str”  当str是空则返回真
  • -n “str”  当str是非空则返回真
  • “str1”=”str”  当str1==str2则返回真
  • “str1”!=”str”  当str1!=str2则返回真

2.3整数比较

num1=10num2=20[ "${num1}" -eq "${num2}" ]echo $?
  • -eq  等于
  • -gt  大于
  • -lt  小于
  • -ge  大于等于
  • -le  小于等于
  • -ne  不等于

2.4逻辑运算符

[ ! -e /var/log/message ]  非[ -e /var/log/message -a -e /var/log/message ]  与[ -e /var/log/message -o -e /var/log/message ]  非 ! [ -e /var/log/message ]  非[ -e /var/log/message ] && [ -e /var/log/message ]  与[ -e /var/log/message ] || [ -e /var/log/message ]  非