1.分类
图形化:KDE
命令行:bash/sh/ksh/csh
-------------------------------------------------------------------
交互式:
非交互式:
-----------------------1.shell 编写运行------------------------------------------------ Last login: Sun Oct 21 05:07:58 2012 from 192.168.5.222 #-----------------------系统用户支持的shell [root@instructor /test]# echo $SHELL #-------------统计当前系统有多少用户 [root@instructor test]# cat /etc/passwd |wc -l [root@instructor test]# su h2 h2:x:501:502::/home/h2:/bin/bash#-------用户当前的shell,可修改 [h2@instructor test]$ fgrep h2 /etc/passwd h2:x:501:502::/home/h2:/bin/bash #-------------------------------------------- [root@instructor /test]# vi t1.sh name="java" #----------------------------------------------------------------- [root@instructor test]# . t1.sh ---------------------------------------------------------------------------------------------------- -------------------------2.环境变量继承---------------------------------------------------------- #!/bin/bash "t2.sh" [New] 3L, 21C written #!/bin/bash "t3.sh" [New] 2L, 22C written [root@instructor test]# bash t3.sh [root@instructor test]# #-----------./t3.sh运行需授权 [root@instructor test]# source t3.sh [root@instructor test]# #-------------------因为t3.sh中未声明初始化变量,t3.sh运行无结果 ------------------------------------- [root@instructor test]# . t2.sh [root@instructor test]# bash t3.sh [root@instructor test]# #--------------------------------t2.sh初始化变量,t3必须继承t2的环境变量 #---------*.sh;source *.sh 继承父shell,t3运行有结果 [root@instructor test]# export name="Hello everybody" #!/bin/bash echo $name "t4.sh" [New] 4L, 25C written -------------------------- [root@instructor /test]# passwd h2 ------------------------------------------- [root@instructor test]# su - h2 #!/bin/bash echo $name "h2t1.sh" [New] 3L, 24C written [h2@instructor ~]$ ------------------------------------------------------------------------------------------------------ -------------------------------------------4.查看文件类型------------------------------------------ [h2@instructor ~]$ cd / -------------------------------------------5.tar包------------------------------------------ [root@instructor test]# cat t2.sh>t5.sh [root@instructor test]# vi 1.txt this is a text "1.txt" [New] 1L, 15C written #------打包 #----------------------find /test –name “*.sh” |xargs tar -cvf sh.tar ------------------------解包 [root@instructor test]# tar -xvf sh.tar [root@instructor test]# tar -tvf sh.tar ---------------------------------------------------------------------------------------------- --------------------------------------6.正则表达式------------------------------------------ [root@instructor test]# mkdir -p /test/a{1,2,3} #---------------建立9个文件夹 [root@instructor test]# rm -rf /test/a{1,2,3} #!/bin/bash "t6.sh" 3L, 46C written |
2.shell开发语法
(1)不需要明确指定变量类型
(2)所有变量默认是字符串
(3)函数不需要指定形参列表,形参类型
(4)调用函数,直接使用函数名,不加括号
(5)变量可以直接调用,不需要声明
(6)变量名和值之间用=连接不需要空格
[root@instructor test]# su h2 #!/bin/bash } } f2 [h2@instructor test]$ vi h2t2.sh #!/bin/bash } } f3() f1 f2 f3 echo "v2 is " echo "__________________________________________________" __________________________________________________
[h2@instructor test]$ #--------------------------------以上v3 被对于为local,为局部变量 #--------------------------------以上v1,v2为全局变量 #--------------------------------以下是算数运算 [h2@instructor test]$ vi h2t3.sh #!/bin/bash add1() add add1 add2 echo "add2() have result var1=" $var1 " var2=" $var2 " var3=" $var3 100*200=20000 |
3. if语句
(1)语法:
if …; then
…
elif …; then
…
else
…
fi
(2)
(3)常有比较符
整数比较
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
*********-----------[和“$变量”用空格连接,“$变量”和[ 用空格连接*************
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))
*********-----------数学运算比较,中间用两个括号括住(())*************
-------------------------------------------------------------------------
字符串比较
= 等于,如:if [ "$a" = "$b" ]
== 等于,如:if [ "$a" == "$b" ],与=等价
-b file 若文件存在且是一个块特殊文件,则为真
-c file 若文件存在且是一个字符特殊文件,则为真
-d file 若文件存在且是一个目录,则为真
-e file 若文件存在,则为真
-f file 若文件存在且是一个规则文件,则为真
-g file 若文件存在且设置了SGID位的值,则为真
-h file 若文件存在且为一个符合链接,则为真
-k file 若文件存在且设置了"sticky"位的值
-p file 若文件存在且为一已命名管道,则为真
-r file 若文件存在且可读,则为真
-s file 若文件存在且其大小大于零,则为真
-u file 若文件存在且设置了SUID位,则为真
-w file 若文件存在且可写,则为真
-x file 若文件存在且可执行,则为真
-o file 若文件存在且被有效用户ID所拥有,则为真
-z string 若string长度为0,则为真
-n string 若string长度不为0,则为真
string1 = string2 若两个字符串相等,则为真
string1 != string2 若两个字符串不相等,则为真
int1 -eq int2 若int1等于int2,则为真
int1 -ne int2 若int1不等于int2,则为真
int1 -lt int2 若int1小于int2,则为真
int1 -le int2 若int1小于等于int2,则为真
int1 -gt int2 若int1大于int2,则为真
int1 -ge int2 若int1大于等于int2,则为真
!expr 若expr为假则复合表达式为真。expr可以是任何有效的测试表达式
expr1 -a expr2 若expr1和expr2都为真则整式为真
expr1 -o expr2 若expr1和expr2有一个为真则整式为真
---------------------------------------------------------------------
特殊变量
$0 正在被执行命令的名字。对于shell脚本而言,这是被激活命令的路径
$n 该变量与脚本被激活时所带的参数相对应。n是正整数,与参数位置相对应($1,$2…)
$# 提供脚本的参数号
$* 所有这些参数都被双引号引住。若一个脚本接收两个参数,$*等于$1$2
$@ 所有这些参数都分别被双引号引住。若一个脚本接收到两个参数,$@等价于$1$2
$? 前一个命令执行后的退出状态
$$ 当前shell的进程号。对于shell脚本,这是其正在执行时的进程ID
$! 前一个后台命令的进程号
[h2@instructor test]$ vi h2if.sh #!/bin/bash echo "------------------------------" echo "-----------------------------" ------------------------------------------------------------------------------------------------------------- [h2@instructor test]$ vi h2if2.sh #!/bin/bash -------------------------------------------------------------------------- [h2@instructor test]$ vi h2if2.sh #!/bin/bash [h2@instructor test]$ su root ------------------------------------------------------------------------- [root@instructor test]# vi h2if.sh echo "=" echo "------------------------------" echo "-----------------------------" echo "-----------------------------" #--------------------(())适用于==,>,<,<=,>= #--------------------[ $1 比较符 $2 ]适用于 –eq,-ge,-le,-ne,-lt,-gt #--------------------[ $1 \> $2 ]转义大于号 ----------------------------------------------------------------- [h2@instructor test]$ vi h2if4.sh #!/bin/bash [h2@instructor test]$ . h2for4.sh ---------------------------------------字符串比较-------------------------------- [h2@instructor test]$ vi h2str1.sh #!/bin/bash name="java"; if [ $name = "java" ];then "h2str1.sh" [New] 9L, 97C written -----------------------------------目录判断--------------------------------------------- [h2@instructor test]$ . h2str1.sh #!/bin/bash if [ -d/lib ];then "h2dir1.sh" [New] 7L, 96C written |
4. for语句
语法
for (( cond1; cond2; cond3 )) do
…
done
----------------------
for var in …; do
…
done
[root@instructor test]# su h2 #!/bin/bash for i in 1 2 3 4 5 6 echo $(($i*100-12)) "h2for.sh" [New] 9L, 66C written --------------------------------------动态取值----------------------- [h2@instructor test]$ vi h2for2.sh #!/bin/bash for i in `ls /` echo $i done "h2for2.sh" [New] 8L, 47C written |
5.引号
在shell中引号分为三种:单引号,双引号和反引号。 由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。例如: |
6.while语句
语法:
while [ cond1 ] && { || } [ cond2 ] …; do
…
done
h2@instructor test]$ vi h2while.sh #!/bin/bash declare -i h1=1 #---declare –i 变量 while [ $h1 -lt 10 ] echo $h1 done ---------------------------------------求和------------------------------------- [h2@instructor test]$ vi h2sum.sh #!/bin/bash declare -i v1=0 "h2sum.sh" 14L, 120C written ---------------------------------------文件目录------------------------- [h2@instructor test]$ vi h2dir2.sh #!/bin/bash for file in `ls /` "h2dir2.sh" [New] 12L, 128C written [h2@instructor test]$ ls |
7.until
语法:
until [ cond1 ] && { || } [ cond2 ] …;
do
…
done
[h2@instructor test]$vi h2until.sh #!/bin/bash declare -i i=0 echo $i done "h2while2.sh" [New] 10L, 74C written [h2@instructor test]$ . h2until.sh |
8.break
[h2@instructor test]$ vi h2brk.sh declare -i i=1 ~ |
9.其他
--------------------------1. ---------------------------&&----条件true是输出---------------------------------------------- ---------------------------||----条件false是输出---------------------------------------------- [h2@instructor test]$ vi h2spec1.sh #!/bin/bash name="cswggod" "h2spec1.sh" [New] 12L, 357C written -----------------------------------以上例输出逻辑错误 ------------------------[ $变量 = 值 ],变量,值和等号间有空格隔开 ------------------------修改为 #!/bin/bash name="cswggod" "h2spec1.sh" 12L, 365C written 安装 [root@instructor Packages]rpm –ivh dialog-1.1-9.20080819.1.el6.x86_64.rpm [h2@instructor test]$ vi h2msg1.sh dialog --inputbox input 20 40 [h2@instructor test]$ . h2msg1.sh [h2@instructor test]$ vi h2msg2.sh #!/bin/bash echo "What's your name" read name echo "your name is $name" "h2msg2.sh" [New] 12L, 357C written [h2@instructor test]$ . h2msg2.sh -----------------------------------3.apache上运行shell-------------------------------------------- [h2@instructor test]$ su root name="java" ----------------------------------99运算表-------------------------------------------- #!/bin/bash declare -i a=1 for ((a;a<=9;a++)) for ((b=1;b<=a;b++)) done done "h2cacl.sh" 16L, 143C written ---------------------------------sum--------------------------------- [root@instructor test]# vi h2sum2.sh #!/bin/bash n=1
~ |
10.case
语法:
case var in
pattern 1 )
… ;;
pattern 2 )
… ;;
*)
… ;;
esac
[h2@instructor test]$ vi h2case.sh #!/bin/bash echo "Input Lesson" read lesson case $lesson in "java") "oracle","ORACLE") "h2case.sh" 22L, 200C written |
转载于:https://blog.51cto.com/cswggod/1039866