#!/bin/bash
echo "前台执行的pid:$$"
find / -iname hello.sh & #尾部加上and符让这条命令在后台执行 这样不会阻塞下面命令的执行
echo "后台执行的pid: $!"
位置参数变量
预定义变量
$?返回上一条命令运行状态
正确运行是0
不正确非0
read 变量
-p 提示信息
-t 读秒
-n 字符数
-s 隐藏输入数据
查看环境变量 env
定义环境变量export
等号左右不能有空格
有空格需要用双引号或单引号
双引号内特殊字符有意义
单引号内特殊字符就是纯字符
变量叠加
x=123 x="$x"456 x=${x}789
变量查询set
set -u调试时候用可以提示是否存在变量
unset删除变量不需要加$
unset x
---
位置参数变量的作用:向脚本传递值
位置参数是预定义变量的一类
linux可支持中文
环境变量的生效文件在后面讲
用户自定义变量
-----
----
shell变成课程简介-bash变量
----
PS1
ps1是设置当前提示符的格式,
括号中就是所说的提示符
上面列举了一些ps1的变量,还有很多其他的。
pah的含义
自定义环境变量
export 变量名=变量值 或者 变量名=变量值 export 变量名
在定义的变量名前加上export就行了
查看变量名
set
查看环境变量
env
查看变量值
echo $y
删除变量
unset y
使用pstree工具可以查看bash的层级。
变量查看 set
通过set命令可以查看已经定义的变量
set
区分变量未声明或者值为空
echo $a
如果a未定义,上面输出是一个空,如果定义了没赋值也是空,这时就没法区分是哪种情况。这时通过运行命令set -u,再运行上面的命令就会输出,变量未定义
set -u echo $a -bash: a: unbound variable
删除变量 unset
unset name
变量前不需要加$符号,因为删除的不是值
1.调用变量
在变量前面加$符号就可以了。$变量名
echo是输出的意思
变量的值默认都是字符串类型,即使是数字,比如 x=5,5是字符串不是数字类型
2.变量叠加(拼接)
x=123
x="$x"456 // 123456
x=¥{x}456 // 123456
等号两边不能有空格
变量名不能以数字开头
值有空格要用单引号或双引号括起来;双引号里面的特殊符号,比如$是有特殊含义的,如果用单引号就只是表示一个符号,失去了特殊的含义
#!/bin/bash
#read接收键盘输入信息姓名,写入变量name
read -p "please your name : " name
echo $name
#read接收键盘输入信息密码,写入变量passwd
read -p "please you passwd : " passwd
echo -e "\r"
echo $passwd
#read接收键盘输入信息性别,写入变量sex
read -n 1 -p "please input youn sex [M/F]: " sex
#if多分支判断是男还是女
if [ $sex == "M" ];then
echo -e "\r"
echo "$sex"
elif [ $sex == "F" ];then
echo -e "\r"
echo "$sex"
else
echo -e "\r"
echo "please input right sex [M/F]."
fi
#!/bin/bash
#num1和num2两个变量赋值位置参数变量$1、$2
num1=$1
num2=$2
#变量sum求和的值是num1加num2
sum=$(($num1+$num2))
#打印输出变量sum的值
echo $sum
bash 预定义变量 $? $$ $!
#!/usr/bin/env bash arg1=$1 arg2=$2 # ✅ num=$(($arg1 + $arg2)) # ✅ str=$((arg1 + arg2)) echo "num: \$arg1 + \$arg2 = $num" # -e 换行 echo -e "\n" echo "str: arg1 + arg2 = $str" # DEMO # ./str.sh 1 2 # num: $arg1 + $arg2 = 3 # str: arg1 + arg2 = 3
zsh bug
https://stackoverflow.com/questions/18428374/commands-not-found-on-zsh
for loop
for i in $*
do
echo "参数 i" $i
done
#!/usr/bin/env bash
echo ? emoji ^-v-^
# -e 换行
echo -e "\n"
arg1=$1
arg2=$2
arg3=$3
arg4=$4
arg5=$5
arg6=$6
arg7=$7
arg8=$8
arg9=$9
# >= 10, $n => ${n} ✅
arg10=${10}
arg11=${11}
arg12=${12}
# arg10=$10
# arg11=$11
# arg12=$12
echo $arg1
echo $arg2
echo $arg3
echo $arg4
echo $arg5
echo $arg6
echo $arg7
echo $arg8
echo $arg9
echo $arg10
echo $arg11
echo $arg12
# ? ✅, 参数可以为空
all=$((arg1 + arg2 + arg3 + arg4 + arg5 + arg6 + arg7 + arg8 + arg9 + arg10 + arg11 + arg12))
# -e 换行
echo -e "\n"
echo $all
# DEMO
# ./dollar-args.sh 1 2 3 4 5 6 7 8 9 10 11 12
# 55 + 23 = 78
# const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
# arr.reduce((acc, item) => acc += item, 0);
$n, $0, $1~$9, ${10}~${n}
$* , 参数整体
$@, 参数列表
$#,参数个数
export PATH=/usr/local/nginx/sbin/:$PATH (网上查找的添加进环境变量的命令) 注意 自定义的路径在环境变量$PATH之前 并且用分号":"分隔
变量叠加的应用
PATH="$PATH":/root/sh