http://www.cnblogs.com/nfcm/p/7743418.html
https://www.cnblogs.com/zhang-jun-jie/p/9266858.html
- 建立.sh文件 vim a.sh
- 执行.sh文件 sh filename
- chmod +x test.sh
默认我们用vim编辑的文档是不带有执行权限的,所以需要加一个执行权限,那样就可以直接使用’./filename’ 执行这个脚本了
chmod +x a.sh
./a.sh
更改权限
查看文件权限的命令,比如我查看/data目录下的文件权限命令:
ls -al : 查询当前目录下所有文件的权限
如果目录下的所有文件都需要以管理员的方式进行文件的复制,创建,和移动。
比如我的data目录 ,此时只需要: $ sudo chmod 777 /data1
- chmod [who][+|-|=][mode] 文件[夹]名
其中who可以为下面字母中的任意一个或者它们的组合。
u 即user,表示文件[夹]的所有者
g 即group,与文件[夹]所有者处于相同组的所有用户
o 即others,其它用户
a 即all,所有用户
+、-、=符号的含义分别为:
添加某个权限
取消某个权限
= 赋予给定权限并取消其它所有权限
mode表示权限,可以是下面字母的任意组合。
r 可读
w 可写
x 可执行
s 文件执行时将进程所属用户(u+s)或进程所属组(g+s)设置为该文件所属用户
t 保存程序的文本到交换设备上
u 与文件主拥有相同的权限
g 与文件所属组拥有相同的权限
o 与其他用户拥有相同的权限
**
一、输出
#! /bin/sh#定义变量name=张三echo $nameecho "参数:$*"echo "参数个数$#"
第一行:一般默认第一行都是上面这段#! /bin/sh,
通知系统用/bin/sh来执行下面的程序。
以“#”开头的行代表注释
echo代表输出后面一段话的到用户界面
$name 代表使用了name这个变量(定义shell变量在下面介绍)
$* 代表所有的参数
$# 代表参数的个数
$? 代表上一个命令的返回值
$数字: 代表第几个参数
**$$ Shell本身的PID(ProcessID)
$! Shell最后运行的后台Process的PID
$? 最后运行的命令的结束代码(返回值)
$- 使用Set命令设定的Flag一览
$ 所有参数列表。如”$“用「”」括起来的情况、以”$1 $2 … $n”的形式输出所有参数。
$@ 所有参数列表。如”$@”用「”」括起来的情况、以”$1” “$2” … “$n” 的形式输出所有参数。
$# 添加到Shell的参数个数
$0 Shell本身的文件名
$1~$n 代表第几个变量
二、输入数据并读取
除了带参数的方式我们还可以使用read进行读
#! /bin/shecho "please enter a"read aecho "please enter b"read becho "a=$a,b=$b"
如果read命令后有变量名,输入内容赋给该变量。
如果read命令后未跟变量名,读入的行将被赋值给内置变量REPLY。
三、if判断
**(一)判断条件是否正确test是一个固定关键字,用来判断condition的描述是否正确
#! /bin/shif (test "start" = "${1}" ) thenecho "start"elseecho "end"fi
(二)判断文件或者文件夹是否存在
option:
| -d | 文件存在且是目录 |
|---|---|
| -e | 文件存在 |
| -r | 文件存在且可读 |
| -w | 文件存在且可写 |
| -x | 文件存在且可执行 |
#! /bin/shif [ -d "${1}" ]; thenecho existelseecho notexistfi#格式:#if [ -option file]; then# commands#else# commands#fi
四、循环
1. While
while[ expr ]: ([右边和]左边都要有一个空格)
#! /bin/shtmp=0while [ "$tmp" != "5" ];doecho "curtmp=$tmp"tmp=$[ $tmp + 1 ]done
2. for
#! /bin/shfor name in $*; #name是变量名doecho "$name"done
3. case
eg: 如果有一个pattern匹配到跟string内容一样,执行这里面的内容,否则执行最下面的分支,
*;;两个分号代表退出case循环,跟C语言的break
case "string" inpattern_1)commands;;pattern_2)commands;;*)commands;;esac
五、Shell命令
如果我们想在shell中执行一段命令,并将该命令的值存放到一个变量中,
就要用到 符号(在1数字旁边)
#! /bin/shresult=`ls`echo result=$result
六、函数
eg:
#! /bin/shfunction fun1{echo "第一个参数:$1"echo "第二个参数: $2"return 100}fun1 3 4echo "函数返回值:$?"
七、练习
#! /bin/bash#编写shell脚本,批量建立用户user_00, user_01, … ,user_100并且所有用户同属于users组;groupadd usersfor i in `seq 0 9`;douseradd -g users user_0$idonefor j in `seq 10 100`;douseradd -g users user_$jdone
#! /bin/bash# 编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下for f in `ls /root/`;doif [ -d $f ] ; thencp -r $f /tmp/fidone
#! /bin/bash# 编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,# 要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;n=0while [ $n -lt "1" ]; doread -p "Please input a number, it must greater than "1":" ndonesum=0for i in `seq 1 $n`; dosum=$[$i+$sum]doneecho $sum
