基础教程参考:
http://www.runoob.com/linux/linux-shell-variable.html
零、前提
1.
Shell 脚本(shell script),是一种用shell编写的脚本程序
shell (开发shell语言)与 shell script (使用shell编程) 不同
2.
shell 脚本可执行,不是因为 .sh 扩展名称
3.运行方式
3.1
cd 到当前目录
chmod +x ./*.sh 是因为文件具有可执行的权限
./*.sh .表示当前目录
3.2
/bin/sh *.sh 不需修改文件权限,直接运行
bash *.sh
3.3
source *.sh
3.4
sh -x *.sh 测试运行,输出每一步的执行逻辑及细节
sh -n *.sh 检查语法错误
一、变量定义及赋值
1.变量声明赋值
yourname=hello
注意:
等号两侧无空格
与java不同,无需指明变量类型
2.变量使用
${yourname}
3.重新赋值
yourname=world
4.只读
readonly yourname
试图修改只读变量时,会有异常
/usercode/file.sh: line 9: yourname: readonly variable
5.删除
unset yourname
echo $yourname
无输出结果
6.异常示例
yourname=hello world
echo $yourname
输出hello
异常提示:/usercode/file.sh: line 5: world: command not found
空格被理解为分隔符号,空格前赋值结束,world被机器解释为命令,而无此命令,所以异常
修正
yourname="hello world"
echo $yourname
7.变量类型
- 系统变量,大写,定义在 /ect/profile 中
- 局部变量,写在函数内部的变量,作用域的范围在函数内部,函数外则失效
普通变量==》环境变量
cat /etc/profile | grep yourname ==> 结果无
export yourname
cat /etc/profile | grep yourname ==> 结果有
删除环境变量
vim /ect/profile 不同于普通变量 unset yourname 即可,否则,重启后,系统变量依然存在
环境变量使用
test=$LOGNAME
echo $test ==> 登录用户名
test=$HOME ==> home文件路径
test=$LANG ==> 编码格式 UTF-8
8.变量内容由其他命令提供
yourname=$(date +%F)
echo $yourname
yourname=`date +%F`
echo $yourname
二、字符串
echo "hello ${yourname}"
echo 'hello ${yourname}'
1.单引号
直接输出,不转义
echo ''
2.双引号
转义输出,引用变量
3.长度
yourname="hello"
strlength=${#yourname}
echo "strlength:${strlength}"
4.子串
strsub=${yourname:1:2}
echo "strsub:${strsub}"
输出:el
不同于java
System.out.println("hello".substring(1, 2));
输出:e
5.字符位置
string="string is string"
echo `expr index "$string" s`
输出:1
不同于java:
System.out.println("string is string".indexOf("s"));
0,从0开始计数
6.其他运算
str1="a"
str2="b"
str3="a"
#是否相等,一个等号
if [ $str1 = $str3 ];then echo "eq" ; else echo "ne" ;fi
[ $str1 != $str3 ]
# 为空,返回true
[ -z $str1 ]
#非空,返回true
[ -n $str1 ]
#非空为true
[ $str1 ]
三、数组
1.定义
以空格分隔元素
array=(1 2 3 4 5 6)
数组中的数据格式可不一致
array=(1 2 3 "4" 5.67 8 )
echo ${array[@]}
echo ${array} 若未指定下标,默认输出第一个元素
2.长度
echo ${#array[@]}
3.数组中元素引用
${array[1]}
4.所有元素
array=(1 2 3 4 5 6)
for str in ${array[*]}
do
echo $str
done
四、注释
#---------
#
#---------
#后为注释
五、接收传参
1.
param.sh
#文件名称
filename="filename:$0"
echo $filename
#参数个数
paramcount="param-count:$#"
echo $paramcount
#第一个参数
firstparam="firstparam:$1"
echo $firstparam
#第二个参数
secondparam="secondparam:$2"
echo $secondparam
#所有参数
allparam="allparam:$*"
echo $allparam
#所有参数
allparame="allparame:$@"
echo $allparame
currentpid="currentpid:$$"
echo $currentpid
#循环
for str in "$*"; do
echo $str
done
for str in "$@"; do
echo $str
done
#显示最后命令的退出状态。0表示没有错误
lastrunstate="lastrunstate:$?"
echo $lastrunstate
lastpid="lastpid:$!"
echo $lastpid
运行
./param.sh 1 2 3 4 5 6 7 8 9
用括号而非中括号,数据间以空格分割
2.$* 与 $@ 区别:
只有在双引号中体现出来。
"$*" 等价于 "1 2 3 ..."(传递了九个参数)
"$@" 等价于 "1" "2" "3" ...(传递了九个参数)。
3.第十个以后的参数
${10}
六、循环
#!/bin/bash
i=0
s=0
while [ $i -le 100 ]
do
i=$(($i+1))
s=$(($s+$i))
done
echo $s
while [ $i -le 100 ]
do
let "i++"
let s=s+i
done
echo $s
1.
array=(1 2 3 "4" 5.67 8 )
for str in ${array[@]}
do
echo ${str}
done
==>
for str in ${array[@]}; do echo ${str}; done
即,若去掉分行,以;间隔各个分界
后一种适用于命令行运行
init=0
while (($init < 5))
do
echo $init
let "init++"
done
num=3
case num in
1) echo "1" ;;
2) echo "2" ;;
*) echo "3" ;;
esac
s=0
i=0
while (($i <= 100))
do
s=` expr $s + $i `
let "i++"
done
echo $s
七、判断
if条件
if [ $a eq $b ]
then
echo
else
echo
fi
注意[]使用及内部空格
a=10
b=20
if [ $a -eq $b ]
then
echo "eq"
elif [ $a -gt $b ]
then
echo "gt"
else
echo "lt"
fi
==>
if [ $a -eq $b ] ; then echo "eq" ; elif [ $a -gt $b ] ; then echo "gt" ; else echo "lt" ;fi
八、运算
1.算术运算
a=10
b=20
#1
c=`expr $a + $b`
echo $c
#2
d=$(($a + $b))
echo $d
#3
let e=a+b
echo $e
#4
i=0
let "i++"
let i=i+1
#5
f=$[a+b]
echo $f
备注:
使用此种方式
s=`expr $a + $b`
其他:- / % \*(乘法需转义)
2.比较运算
关系运算符只支持数字,不支持字符串,除非字符串的值是数字
a=10
b=20
#相等
if [ $a -eq $b ]
then
echo "eq"
else
echo "ne"
fi
#不等
if [ $a -ne $b ]
then
echo "ne"
else
echo "eq"
fi
# >
if [ $a -gt $b ]
then
echo "gt"
else
echo "lt"
fi
# <
if [ $a -lt $b ]
then
echo "lt"
else
echo "gt"
fi
# >=
if [ $a -ge $b ]
then
echo "ge"
else
echo "le"
fi
# <=
if [ $a -le $b ]
then
echo "le"
else
echo "ge"
fi
3.布尔运算
! 非
a=10
b=20
if [ ! $a -gt $b ]
then
echo "1"
else
echo "2"
fi
-o 或
a=10
b=20
c=30
if [ $a -gt $b -o $a -lt $c ]
then
echo "1"
else
echo "2"
fi
-a 且
a=10
b=20
c=30
if [ $a -gt $b -a $a -lt $c ]
then
echo "1"
else
echo "2"
fi
4.逻辑运算
&& ||
a=10
b=20
c=30
if [[ $a -gt $b && $a -lt $c ]]
then
echo "1"
else
echo "2"
fi
注意:两个[[ ]] 如果写成一个[] ,会提示缺少 []
5.文件判断
file=./xxx.txt 文件路径
if [ -r $file ]
then
echo "1"
else
echo "2"
fi
-r 可读
-w 可写
-x 执行
九、输入、输出
1.>
覆盖输出
echo "hello" > test.sh
echo "yourname=\"hello\"" > test.sh
echo "$yourname" > test.sh
转义 $yourname 为空,添加为空
echo '@yourname' > test.sh
不转义,正常添加
2.>>
追加输出
3.显示执行结果
echo `ls -al /home`
echo `date`
十、test
用于数值、字符、文件判断
a=10
b=20
if [ $a -eq $b ]
then
echo "1"
else
echo "2"
fi
if test $a -eq $b
then
echo "1"
else
echo "2"
fi
if test $[a] -eq $[b]
then
echo "1"
else
echo "2"
fi
if [] ==> if test
十一、
while read -p "please input a num :" num
do
echo "$num"
done
ctrl+d 截止输入并推出
十二、使用命令赋值
shell
使用命令赋值
base=`basename /usr/local/`
`` 数字键1旁边的按键
分享到:
相关推荐
最近在学习shell,找了很多资料,这个是其中不错的shell基础知识讲解,虽然比较基础,但是很容易懂~
shell基础 umask chomod 权限更改 定时任务 解压缩
shell基础知识介绍
Linux Shell编程基础完整知识,基础的、
linux shell 基础知识 ,word版,看着更方便。。。。。
主要介绍了UNIX的基础知识,以及shell编程的初阶知识,对UNIX学习的入门以及Shell编程很有帮助
熟悉 Shell 基础知识 掌握 Shell 脚本的基本操作 结合实际案例展示 Shell 脚本编写的最佳实践 ;Linux 中的文本流;输出重定向;输入重定向;管道;熟悉 Shell 基础知识 掌握 Shell 脚本的基本操作 结合实际案例展示 ...
cshell的基础知识,描述了基本命令的应用,编程基础等等,帮你更快的解决编程基础问题
shell 基础知识、介绍、根据线上课程
5. SHELL 输入与输出 6. 命令执行顺序 7. 正则表达式介绍 文本过滤 8. GREP 家族 9. AWK 介绍 10. sed 用法介绍 11. 合并与分割 12. tr 用法 13. 登录环境 14. 环境与 SHELL 变量 特定s h e l l变量 15. 引号 16. ...
从网络上整理的shell基础,入门shell非常有帮助
Shell脚本编程基础知识: 掌握创建 shell 脚本的基本步骤 学会使用条件测试 掌握 if 条件结构与 case 选择结构 掌握 for 循环、while 循环和 until 循环结构 学会 shift 命令的使用 学会 shell 脚本的调试
Linux运维-运维系统服务04-Shell脚本d2-shell基础知识-02SHELL介绍.mp4
shell对于很多的初学者来说Shell其实是一个非常陌生的东西,在说shell之前我们先引用一些基础的知识。
shell编程-基础知识
描述Shell脚本的基础知识,更好地配合C语言编程。
介绍unix和shell的基础知识;比较简单,通俗易懂
Linux运维-运维系统服务04-Shell脚本d2-shell基础知识-05BASH特性.mp4