以下都是shell的语法规则和基本命令,一起来吧:
touch test.sh 新建一个shell文件,
chmod a=rwx test.sh 更改test.sh的读写权限(这不十分重要,不能忘记),
vi test.sh编辑test.sh (第一句一定要是 #!/bin/sh),
echo "hello word" 写入shell语句,
./test.sh 在当前目录下执行test.sh
1. echo "aaa"; 打印出字符串
2. variable_one="bbb"; 定义变量并赋值(赋值等号两边不能有空格)
3. unset variable_one; 清除变量
4. let "bb = $aa - 1"; 设置变量的值(赋值等号两边可以有空格,变量bb一定不能有$符号)
5. echo ${aa:-1} 如果aa有值,就打印aa的原值,如果没有值或未定义aa,就打印1;
6. if test -w aa.sh 判断文件是否可写的流程控制语句
then
echo 'the file aa.sh allow write in'
else
echo "don't allow write in"
fi
7. test 测试文件状态 参数如下 写法:test -w aa.sh 或者 [ -w aa.sh ] (注意中括号的两边一定要有空格,不然报错)
-d 目录是否存在 -w -r -x 可写可读可执行
-s 文件长度是否大于零,非空
-f 是否是正规文件 -L 是否有链接符号(注意大写) -u 是否有suid位设置
8. 字符串测试: = != -z是否为空 -n字符串是否非空
9. 数值测试: -eq相等 -ne不等 -gt大于 -lt小于 -ge大于等于 -le小于等于
10. if then else ; if then elif elif fi; 常用的流程控制语句
11. 几种循环:
for i in 1 2 3 4 5
do
echo $i
done
#----------------------------------
one=1
until [ $one -gt 5 ]
do
echo $one
let one+=1
done
#----------------------------------
one=1
while [ $one -lt 5 ]
do
echo $one
let "one = $one + 1"
done
#------------------------------------
for ((i=1; i<6; i+=1))
do
echo $i
done
12. case语句
echo "Please input 'yes' or 'no'"
read var #接收输入的值
case $var in
yes | Yes ) echo "you input variable is yes" ;;
no | no ) echo "you input variable is no " ;;
* ) echo "input error!" ;;
esac
14. 特定shell变量
$# 传递到脚本参数的个数
$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过九个
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的进程ID号
$@ 与$#相同,但是使用时加引号,并在引号中返回每个参数
$- 显示shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误
15. times ls -l 查看运行ll命令共用了多长时间 (shell内嵌命令)
16. type date 查询命令是否有效,是否为内嵌命令类型,如果不是内嵌命令,type将打印命令的路径。(shell内嵌命令)
17. 运行shellhanshuu; . nine.sh 运行nine中的函数,如果文件中有输出则打印相应输出。 然后在hello,运行nine中的hello函数,
注意:如果hello函数修改了,用unset hello进行函数刷新。或者重新运行一次 . nine.sh
就相当与用 . nine.sh调用nine.sh的shell脚本。然后再调用脚本中个各个函数,如果sell不关闭或者不执行unset hello 脚本中的函数,
那么函数永远生效。
18. read命令:read name sex age 一般用空格隔开,输入时输入如下:a aa aaa
19. cat 1.txt 2.txt > 12.txt 把文件1.txt和2.txt连接成一个新的文件12.txt
20. 管道运用:把一个命令的输出传递给另一个命令作为输入。管道用竖杠 | 表示。
如: cat aa.sh | grep "echo" 只显示aa.sh中包涵echo字符串的行。 ls -l | grep "/.sh" 打印所有sh后缀的文件列表
ls -l | tee aa.txt 将输出结果保存到aa.txt文本中。
21. 命令排列:ls -l ; du -sh 顺序执行两个命令; ls -l && du -sh 当前者成功时执行后者,ls -l || du -sh 前者失败是执行后者。