Shell 脚本是系统命令的堆积,用于简化操作步骤,提高效率,减少人为干预,减少系统故障。在学习 Shell 之前必须会熟练的手动运用系统命令,不会手动搭建或者执行某些程序,那么一定学不会 Shell
## 基本格式
[root@Shell ~]# vim test.sh
#!/bin/bash
echo "Hello world"
## 运行脚本
[root@Shell ~]# chmod +x test.sh
[root@Shell ~]# ./test.sh
Hello world
简单的理解变量: 用一个固定的字符串去表示不固定的内容
[root@Shell ~]# a=1
[root@Shell ~]# b=2
[root@Shell ~]# echo $a
1
[root@Shell ~]# echo $b
2
自定义变量
系统环境变量
位置参数变量
预先定义变量
可以写个脚本测试一下
[root@Shell ~]# vim variable.sh
#!/bin/bash
echo " 第 3 个位置参数是$3"
echo " 第 2 个位置参数是$2"
echo " 第 1 个位置参数是$1"
echo " 所有参数是: $*"
echo " 所有参数是: $@"
echo " 参数的个数是: $#"
echo " 当前进程的 PID 是: $$"
echo ‘$4=‘$4
echo ‘$5=‘$5
echo ‘$6=‘$6
echo ‘$*=‘$*
echo ‘$@=‘$@
echo ‘$#=‘$#
echo ‘$$=‘$$
[root@Shell ~]# chmod +x variable.sh
[root@Shell ~]# ./variable.sh 1 2 3 4 5 6
变量名=变量值
number=192.168.1.1
name="Songguoyou"
var1=`date +%F`
var2=$(date +%F)
read
函数从键盘读入变量值
read 变量名
read -p "提示信息: " 变量名
read -t 5 -p "提示信息: " 变量名
read -n 2 变量名
[root@Shell ~]# vim ping.sh
#!/bin/bash
read -p "Input IP: " ip
ping -c2 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "host $ip is ok"
else
echo "host $ip is fail"
fi
[root@Shell ~]# chmod +x ping.sh
[root@Shell ~]# ./ping.sh 192.168.1.1
注意事项: 定义或引用变量时注意事项:
"弱引用"
和‘强引用‘
[root@Shell ~]# namel=Songguoyou
[root@Shell ~]# echo "${name} is good"
Songguoyou is good
[root@Shell~]# echo ‘${name} is good‘
${name} is good
``和 $() 一样,里面的 shell 命令会被先执行
[root@Shell ~]# touch `date +%F`_file1.txt
[root@Shell ~]# touch $(date +%F)_file2.txt
## 整数运算 expr +(加) -(减) \*(乘) /(除) %(余)
expr 1 + 2
expr $num1 + $num2
## 整数运算 $(()) +(加) -(减) *(乘) /(除) %(余)
echo $((5-3*2))
echo $(($num1+$num2))
## 整数运算 $[] +(加) -(减) *(乘) /(除) %(余)
echo $[5+2]
## 整数运算 let +(加) -(减) *(乘) /(除) %(余)
let sum=2+3;
echo $sum
## 小数运算 bc let +(加) -(减) *(乘) /(除) %(余)
echo "2*4" |bc
echo "print 5.0/2" |python
变量删除
[root@Shell ~]# url=www.songguoyou.com.cn
## 获取变量值的长度
[root@Shell ~]# echo ${#url}
## 从前往后,切下去第一个点之前的
[root@Shell ~]# echo ${url#*.}
## 从前往后,切下去最后一个点之前的
[root@Shell ~]# echo ${url##*.}
## 从后往前,切下去第一个点之后的
[root@Shell ~]# echo ${url%.*}
## 从后往前,切下去最后一个点之后的
[root@Shell ~]# echo ${url%%.*}
切片
## 从第0个字符开始,保留之后的5个字符
[root@Shell ~]# echo ${url:0:5}
## 从第5个字符开始,保留之后的5个字符
[root@Shell ~]# echo ${url:5:5}
## 从第5个字符开始,保留之后的所有字符
[root@Shell ~]# echo ${url:5}
变量替换
## 把songguoyou替换成baidu
[root@Shell ~]# echo ${url/songguoyou/baidu}
## 第一个n替换成N
[root@Shell ~]# echo ${url/n/N}
## 所有n替换成N
[root@Shell ~]# echo ${url//n/N}
变量替代
变量没有被赋值:会使用“新的变量值“ 替代
变量有被赋值: 不会被替代
## 空值不会替换
[root@Shell ~]# echo ${url-www.baidu.com}
## 空值会被替换
[root@Shell ~]# echo ${url:-www.baidu.com}
变量自增
## 先赋值,再运算
[root@Shell ~]# let var=i++
## 先运算,再赋值
[root@Shell ~]# let var=++i
原文:https://www.cnblogs.com/songguoyou/p/11884211.html