目录
1、shell变量不需要声明数据类型,所有的变量默认都是字符串类型
2、shell语法中为变量赋值时,等号的左右两边不允许有空格
2)系统环境变量----env命令查看环境变量 ---类似 于 C语言 中的全局变量
3、反引号--->把双引号中的命令标识出来,也就是将反引号中的内容当成一个shell命令进行解析
#!/bin/bash
- #!/bin/bash
- echo "hello world
chmod 777 hello.sh 或者 chmod +x hello.sh
./hello.sh
- #!/bin/bash
-
- echo "GZ2264班 简健铭 来自广东"
- echo "大家好,我是GZ2264班的吴彦祖,这是我写的第一个shell程序"
- echo "作者:简健铭 职业:老六"
- echo "座右铭:杀人放火金腰带"
- C语言: int a;
- shell: str
- C语言 int a = 10;
- shell str=helloworld
echo $str 或者 echo ${str}
str=hello
- HOME: 用户主目录
- PATH: 命令搜索路径
- LD_LIBRARY_PATH: 动态库搜索路径
- PWD: 当前路径
- export PATH=$PATH:/home/china/xxx
- export PATH=/home/china/xxx
./hello.sh aaaa bbbb
注意:
eg: source 1.sh
eg: ./a.out &
eg: nohup ./a.out &
1 变量:2 str = helloworld3 echo $str4 命令行:5 . / hello . sh helloworld6 echo $1
- #!/bin/bash
-
- #变量赋值=两边不能有空格
- str=helloworld
-
- #变量的引用 自定义变量需要定义来赋值
- echo $str
-
-
- #命令行传参
- #./shell-变量 01 02 $0-->./shell-变量 $1-->01 $2--> 02
- echo $0 $1 #类似于argv
2)在""内可以对变量进行引用
- str=hello
- echo "$str world"
3)在""内部是可以使用shell命令,但是使用shell命令需要使用反引号``来括住命令
- #!/bin/bash
-
- str=hello
- #str="jjm"
- #str="hello world"
-
- #echo $str
-
- echo "todao is `date`"
-
- echo 'todao is date'
比如: read str < 1. txt 从 1. txt 中读取数据,存储到变量 str 中 read 是 shell 编程中的一个函数 类似于 scanf ()
命令 2 > filename命令 2 >> filename4 china @ubuntu : ~/ shelldir$ asdsds 2 > a . txt -- 把出错信息重定向到文件 a . txt 中5 china @ubuntu : ~/ shelldir$ cat a . txt6 asdsds :未找到命令
1 #!/bin/bash2 a = 103 b = 204 val = `expr $a + $b ` ( 注意:操作数与运算符,前后至少要有一个空格 )5 echo "val: $val " ---> val : 30
1 #!/bin/bash2 a = 103 b = 204 val = `expr $a + $b \ * 4 ` ( 且不支持括号 )5 echo "val: $val " ---> val : 90
1 str = "hello world"2 echo "${#str}" --> 11
通配符:
1 * 代表任意长度的任意字符2 ? 代表一个长度的任意字符3 [ a-z ]: 代表一个长度的 a-z 之内的字符4 [ az ]: 代表一个长度,只能匹配 a 或者 z 的内容5 [ ^az ]: 代表一个指定范围 a/z 之外的字符 与 [az] 相反!67 %: 从右到左尽可能匹配少的字符8 %%: 从右到左尽可能匹配多的字符9 # : 从左到右尽可能匹配少的字符10 ## : 从左到右尽可能匹配多的字符
1 read val12 read - p "input data:" val1 val2 val33 read val < 1. txt // 从文本输入
1 << 'COMMENT'2 ...3 COMMENT
练习4:从键盘上获取三个同学的信息,并且打印出来
- #!/bin/bash
-
- # read -p "name:" val1
- # read -p "sex:" val2
- # read -p "hight:" val3
-
- # echo "***********"
- # echo "name:$val1 sex:$val2 hight:$val3"
1 = 测试两个字符串内容是否完全一样2 != 测试两个字符串内容是否不一样3 - Z ( zero ) 测试字符串是否为空,为空,返回 true4 - n ( null ) 测试字符串是否不为空,不为空,返回 true
1 test $ { A } x = $ { B } x
1 a -eq b : equal 测试两个整数是否相等2 a -ne b : not equal 测试两个是否不相等3 a -gt b : greater 测试 a 是否大于 b4 a -ge b : greater or equal 测试 a 是否大于等于 b5 a -lt b : little 测试 a 是否小于 b6 a -le b : little or equal 测试 a 是否小于等于 b
1 - d name 测试 name 是否是一个目录 ( dir ) // if test -d 1.txt;then2 - f name 测试 name 是否是一个普通文件 ( file )3 - L name 测试 name 是否为符号链接文件 ( Link )4 - r name 测试 name 文件是否存在并可读 ( read )5 - w name 测试 name 文件是否存在并可写 ( write )6 - x name 测试 name 文件是否存在并可执行 ( excute )7 - s8 e 测试 name 文件是否存在并且长度不为 0 ( size )9 f1 - nt f2 测试 f1 是否比 f2 更新 ( newer than )10 f1 - ot f2 测试 f1 是否比 f2 更旧 ( older than )
test命令可以用[]来简写
1 test expression <===> [ expression ]
test expr1 "test_buildin" expr2test_buildin :- a and- o or
test expr1 "op" test expr2
比如: test $A = '1' && test $B = '1'[ $A = '1' ] && [ $B = '1' ]
练习5: 判断一个输入的整数是否是奇数,如果是则打印yes ,否则 no
- #!/bin/bash
-
- read -p "input data:" val
- if test `expr $val % 2` -eq 0;then
- echo "偶数"
- else
- echo "奇数"
- fi #与if成对存在
1 第一种:2 if command ; then3 ... 语句列表4 fi5 第二种:6 if command ; then7 ... 语句列表8 else9 ... 语句列表10 fi11 第三种:12 if command ; then13 ... 语句列表14 elif command ; then15 ... 语句列表16 else17 ... 语句列表18 fi
- #!/bin/bash
-
- # read var
- # if [ $var = "hello" ] ; then
- # echo "yes"
-
- # elif [ $var = "other" ] ; then
- # echo "other"
-
- # else
- # echo "no"
-
- # fi
- #!/bin/bash
-
- #从键盘上获取两个整数,比较大小,输出最大值
- # read -p "inputdata:" val1 val2
- # if [ $val1 > $val2 ] ; then
- # echo "max:$val1"
-
- # else
- # echo "max:$val2"
-
- # fi
-
- #判断一个文件是否存在,若存在则打印文件的内容,不存在则输出字符串报错
- # read var
- # if test -f $var ; then
- # echo "is a file"
- # read val<$var
- # echo "file txt:$val"
-
- # else
- # echo "not a file"
- # echo "`$var`"
-
- # fi
-
- #用shell编写脚本程序:读取变量dir,如果该变量代表的值是目录,则切换到该目录下,
- # 并在该目录下创建空文件file.txt,将“hello world ”写到该文件中
- # 如果该目录不存在则创建该目录并切换过去,并显示当前绝对路径
- # read dir
- # if test -d $dir ; then
- # `cd $dir`
- # `touch $dir/file.txt`
- # str="hello world"
- # `echo $str>$dir/file.txt`
-
- # else
- # `mkdir $dir`
- # `cd $dir`
- # echo "当前路径:`pwd`"
-
- # fi
1 case expression in2 pattern1 )3 ... 语句列表4 ;; // 作用类似与 C 语言的 break , 这里 ;; 不能省5 pattern2 )6 .... 语句列表7 ;;8 patternn )9 .... 语句列表10 ;;11 * ) --- 其他值12 .... 语句列表13 ;;14 esac
1 read val2 case $val in3 1 )4 echo "one"5 ;;6 2 )7 echo "two" 例子2:8 ;;9 * )10 echo "error"11 ;;12 esac
例子2:
- if [ $# != 1 ] ; then
- echo "input arg error!"
- fi
-
- case `cat $1` in
- 10)
- echo "large"
- ;;
- 5)
- echo "middle"
- ;;
- 1)
- echo "small"
- ;;
- *)
- echo "other" #类似于C语言里面的default
- ;;
-
- esac
1 for 变量名 in 单词表2 do3 语句列表4 done
比如:
1 for val int 1 2 3 4 52 do3 echo $val4 done
执行结果:
1 china @ubuntu : ~/ shelldir$ chmod 777 for . sh2 china @ubuntu : ~/ shelldir$ . / for . sh3 14 25 36 47 5
1 for val int $ *2 do3 echo $val4 done
执行结果:
1 china @ubuntu : ~/ shelldir$ . / for . sh 1 2 3 4 5 62 13 24 35 46 57 6
===>for也可以写成C风格相同的for循环
for((i=1; i<=5; i++ ))
doecho " $i "done
- #求1到100的和
- val=0
- for (( i=1; i<=100 ;i++));
- do
- val=`expr $i + $val`
- done
- echo "val:$val"
1 while 命令或表达式2 do3 语句列表4 done5 ===> 也可以用 C 语言的 while 风格6 while (())7 do8 语句列表9 done
比如:从键盘上获取一个最小值和最大值,打印他们两个之间的所有取值
1 read - p "min:" min2 read - p "max:" max3 while test $ min - le $ max4 do5 echo "$min"6 min = `expr $ min + 1 `7 done
练习:写一个脚本,求1到100的和
- # 求1到100的和
- # val=0
- # i=1
- # while (($i <=100))
- # do
- # val=`expr $val + $i`
- # i=`expr $i + 1`
- # done
- # echo "val:$val"
1 until 命令或表达式2 do3 done
function_name arg1 arg2 arg3
1 function_name arg1 arg2 arg32 ret = $ ?
1 get_sum ()2 {3 return `expr $ 1 + $ 2 `4 }5 read var1 ; read var26 get_sum $var1 $var27 echo $ ?
- # get_max()
- # {
- # if test $1 -gt $2 ; then
- # return $1
- # else
- # return $2
- # fi
- # }
-
- # read -p "inputdata:" var1 var2
- # get_max $var1 $var2
- # echo "max:$?"
- get_sum()
- {
- sum=0
- a=$1
- b=$2
- if test $a -ge $b ; then
- while test $b -le $a
- do
- sum=`expr $sum + $b`
- b=`expr $b + 1`
- done
- else
- while test $a -le $b
- do
- sum=`expr $sum + $a`
- a=`expr $a + 1`
- done
- fi
- return $sum
-
- }
- read -p "input 2 number:" val1 val2
- get_sum $val1 $val2
- echo "from $val1 to $val2 sum:$?"