#!/bin/sh
#!/bin/bash
#!/user/bin/env/ bash
python中:
#!/user/bin/env/ python
1.创建 .sh文件
2.编写
echo "hello"
echo "i am liyinhang"
exit 0
3.执行 chmod a+x xx.sh
对脚本授予可执行权限
4.输入 ./xx.sh
执行脚本
5.查看脚本退出状态:echo $?
-linux中所有程序执行后都有状态码
-状态码为 0 表示正常,状态码为 正整数 代表异常推出
二、变量
1.定义
#变量定义:等号前后没有空格
a=12345
b=xyz
2.使用
#使用变量时,变量名前面加上$符
echo "---$a---\n===$b==="
printf "---$a---\n===$b===\n"
两者区别在于echo自动换行,printf不换行
3.注意引号的差别
echo "---$a---\n===$b==="
echo '---$a---\n===$b===\n'
4.定义当前shell下的全局变量
-定义:export ABC=9876543212
-定义完成后,在终端里用source加载脚本:source xx.sh
5.常用的系统环境变量
-$PATH:可执行文件目录
-$PWD:当前目录
-$HOME:家目录
-$USER:当前用户名
-$UID:当前用户的uid
三、获取用户的输入
read -p "请输入一个数字:"num
echo "您输入的时:$num"
四、脚本里的引号
1.反引号:里面的内容会被解析成为脚本
echo `ls -a /home/chris` #打印 /home/chris目录下所有的文件和文件夹
2.双引号:它里面的内容会被原样显示,但如果是一个变量,这个变量会被解析
name=liyinhang
echo "大家好,我是$name" #大家好,我是liyinhang
3.单引号:它里面的内容会完全原样输出
name=zhangsan
echo '大家好,我是$name' # 大家好,我是$name
五、脚本里的$
1.${var} 用来获取一个变量的值,一般情况下,大括号可以省略不写
name=bank
echo ${name} #bank
echo $name #bank
2.特殊变量
$# 代表传入参数的个数
$@ 代表传入参数的列表
$0 代表脚本本身
$1 代表传入的第一个参数,$2,$3...以此类推
$* 以字符串方式显示所有传入的参数
$$ 脚本运行的进程ID
$? 显示最后命令的退出状况,0表示没有错误
3.$(cmd)用来执行括号里的脚本命令,相当于使用反引号
echo $(ls /home/chris/Desktop) # 列出当前用户的桌面上的所有文件和文件夹
4.$((expression))用来计算数学表达式expression的值
echo $((1+1)) # 2
六、分支语句
1.if
if command;then
commands
elif command;then
commands
else
commands
fi
2.条件测试命令
[ ... ]:参数两边必须有空格
它可以进行三种比较
-数值比较
-字符串比较
-文件比较
用法:
if [ condition ];then
commands
fi
数值比较
Condition 说明
n1 -eq n2 检查n1是否与n2相等
n1 -ge n2 检查n1是否大于或等于n2
n1 -gt n2 检查n1是否大于n2
n1 -le n2 检查n1是否小于n2
n1 -lt n2 检查n1是否小于n2
n1 -ne n2 检查n1是否不等于n2
字符串比较
Condition 说明
str1 = str2 检查str1是否和str2相同(注意:等号两边要加空格)
str1!=str2 检查str1是否和str2不同
str1<str2 检查str1是否小于str2(需要使用[[]])
str1>str2 检查str1是否大于str2(需要使用[[]])
-n str1 检查str1的长度是否非0(变量需要添加双引号)
-z str1 检查str1的长度是否为0
文件比较
Condition 说明
-d file 检查file是否存在并且是一个目录
-e file 检查file是否存在
-f file 检查file是否存在并且是一个文件
-r file 检查file是否存在并且可读
-w file 检查file是否存在并且可写
-x file 检查file是否存在并且可执行
-s file 检查file是否存在并且非空
-O file 检查file是否存在并且属于当前用户所有
-G file 检查file是否存在并且所属组与当前用户相同
file1 -nt file2 检查file1是否比file2新
file1 -ot file2 检查file1是否比file2旧
七、case语句
#!/bin/bash
read -p "请输入数字" num
case $num in
0)
echo 星期日
;;
1)
echo 星期一
;;
2)
echo 星期二
;;
3)
echo 星期三
;;
4)
echo 星期四
;;
5)
echo 星期五
;;
6)
echo 星期六
;;
*)
echo 其他
;;
esac
八、循环语句:for
基本格式:
for 变量 in 序列
do
要执行的命令
done
eg:
for i in `seq 1 10`
do
if [ $[ $i % 2] == 0 ]
then
echo "偶数: $i"
else
echo "奇数: $i"
fi
done
seq START END 语句用来产生一个数字序列
$[ NUM1 + NUM2 ] 语句用来进行基本的数学运算
[[ ... ]] 语句用来更方便的进行比较判断
九、函数
function foo() {
echo "---------------------------"
echo "Hello $1, nice to meet you!"
echo "---------------------------"
}
function可以省略
传参:
foo arg1 arg2 arg3 ...
eg:
bar() {
echo "执行者是 $0"
echo "参数数量是 $#"
echo "全部的参数 $@"
echo "全部的参数 $*"
if [ -d $1 ]; then # 检查传入的第一个参数是否是文件夹
for f in `ls $1`
do
echo $f
done
elif [ -f $1 ]; then
echo "This is a file: $1" # 如果不是文件夹, 直接显示文件名
else
echo 'not valid' # 前面都不匹配显示默认语句
fi
}
bar $1
十、数组
1.Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:
array_name=(value1 ... valuen)
2.也可以直接使用下标来定义一个数组。
num[0]=1
num[1]="good"
num[2]=yes
3.使用下标可以直接修改数组里的数据
arr=(hello good "yes" 12)
arr[0]=hi
4.使用$和下标可以获取一个数组里的数据,但是注意需要使用{}来包裹变量
arr=(hello good "yes" a 12)
echo ${arr[0]}
5.使用*或者@作为下标,可以获取数组里的所有数据。
arr=(hello good "yes" a 12)
echo ${arr[*]}
echo ${arr[@]}
6.在获取所有数据的前面添加# 可以获取到数组的长度
arr=(hello good "yes" a 12)
echo ${#arr[*]}
echo ${#arr[@]}
7.for...in 遍历
#!/bin/bash
arr=(hello good 12 'yes' hi)
for ele in ${arr[*]}
do
echo $ele
done
shell脚本语法
最新推荐文章于 2023-03-31 19:07:22 发布