使用visual studio code连接远程机器:
Shell语法中,面向过程,不面向对象;非高级编程语言,属于脚本语言,尽量用“”双引号,不要用‘’单引号。
1.变量
1.1规则:a.变量命名只能是英文字母,数字,下划线组成,首字符不能为数字;
b.中间不能有空格,可以是下划线;
c.不能使用标点符号;
d.不能使用bash内置的关键字(可使用help命令查看保留的关键字)
定义变量:name="chuntian"
只读变量:readonly name
使用变量:$name
删除变量:unset name(对只读变量无效)
1.2如果想把一个命令的输出保存到一个变量,使用: 变量名=$(命令) 的方式。
注意:$(( ))2个括号代表数值运算;
$( ) 1个括号代表命令执行;
1.3升级全局变量
.sh结尾的文件中如果使用了$var来引用局部变量,不会生效,可以使用export关键字将局部变量升级为全局变量:
1.4 .bashrc文件:全局环境文件
命令行中的export只能将变量设置为当前程序(进程)的全局变量,无法在其他进程中使用该变量,可以在~/.bashrc隐藏文件中使用export设置变量,这样就所有的进程,所有地方,所有shell窗口中都能使用该变量:
source .bashrc 生效
调用变量的方式:“${var_name}”
env :查看系统的环境变量(同windows中的PATH命令)
$?:获取前一条命令执行结果,0代表成功,非0代表失败
算数运算:$(( 1+1 )) 等效于 "$(expr 1 \+ 1)"
注意:$(( ))2个括号代表数值运算;
$( ) 1个括号代表命令执行;
2.字符串操作
str_name="chuntian"
拼接字符串:greeting="hello,"$str_name""
3.数组操作
定义数组:array_name=()
单独赋值:array_name[n]=valuen
取数组元素:value_n=${array_name[n]}
条件表达式:条件表达式成功,返回0,不成功,返回非0.
[ 1 = 1 ] 两边必须有空格,等同[ 1 == 1 ]
逻辑表达式:&& (python中的and),||(python中的or)
文件表达式:
-f 判断输入内容是否是一个文件
-d 判断输入内容是否是一个目录
-x 判断输入内容是否可执行
-e 判断文件是否存在。
Shell 脚本的宏定义:
#!/bin/bash :代表用bash这个shell执行脚本代码
4.if条件控制:
if [ condition1 ]
then
command1
elif [ condition2 ]
then
command2
.......
else
commandn
fi
举例: if [ a==b ];then echo "true";else echo "false";fi
if [[ a>b ]];then echo "a大于b";else echo "a小于b";fi
tips:当if后面条件判断为>或者<时,判断条件需要用2个[]包裹,
即[[condition]]
if [ $a -eq $b ];then echo ""$a" equal "$b"";elif [ $a -lt $b ];then echo ""$a" less than "$a"";elif [ $a -gt $b ];then echo ""$a" bigger than "$b"";fi
tips:注意各个字符间都必须要有空格,还有尽量都使用双引号,可以不考虑单双引号交替.
5.for 循环
格式1:
for var in item1 item2....itemN
do
command1
command2
........
commandN
done
格式2:
max=10
for ((i=1;i<=max;i++))
do
echo "${i}"
done
for loop in 1 2 3 4 5;do echo "I love chuntian"$loop""
读取文件,循环打印
6.while 循环
while condition
do
command
done
举例:注意比较while read i;do echo $i;done<tt.txt
和for i in $(cat tt.txt);do echo $i;done的区别
此处应比较for i in $(cat tt.txt);do echo $i;done会将文件内的空格算作一行
脚本:
执行结果:
case:
#!/bin/bash
#Author:chuntian_Tester
#Date:2020-02-02
#test while loop
if [ ! $# -eq 3 ];then
echo -e "Usage:\n $0 num1 +|-|*|/ num2"
exit 1
fi
case $2 in
+)
echo "$1 +$3 = $(($1 + $3 ))"
;;
-)
echo "$1 +$3 = $(($1 - $3 ))"
;;
\*)
echo "$1 +$3 = $(($1 * $3 ))"
;;
/)
echo "$1 +$3 = $(($1 / $3 ))"
;;
*)
echo "$2 can not calculate"
esac
exit 0
效果:
7.函数
格式1: 函数名(){ 函数体 }
格式2: function 函数名{ 函数体 }
函数传参:
read -p "请输入用户名:" username 等同于python中的username=input("请输入用户名")