Linux925 shell 变量:本地、环境变量、全局变量;数组:普通数组、关联数组;交互定义、basename、dirname
问题
[caozx26@caozx26 ~]$ cat 1.sh
read -p ""\$#" is:" $#
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh 213 23 213 2132
./1.sh: 第 1 行:read: `4': 不是有效的标识符
ok
[caozx26@caozx26 ~]$
[caozx26@caozx26 ~]$ ./1.sh sd asd asd
./1.sh: 第 1 行:read: `3': 不是有效的标识符
ok
[caozx26@caozx26 ~]$
[caozx26@caozx26 ~]$ array[6]=(12 23121 213 123 "hello" [21]=ff)
bash: array[6]: 无法将链表赋值给数组成员
[caozx26@caozx26 ~]$ names_ar=([name1]=js [n2]=ts [n]=ok)
[caozx26@caozx26 ~]$ echo ${names_ar[*]}
ok
[caozx26@caozx26 ~]$ echo ${names_ar[@]}
ok
[caozx26@caozx26 ~]$ echo ${!names_ar[@]}
0
[caozx26@caozx26 ~]$
全局变量是变量吗 是系统变量吗
变量
环境变量、本地变量
[caozx26@caozx26 ~]$ A=hello\
> ^C
[caozx26@caozx26 ~]$ A=hello
[caozx26@caozx26 ~]$ echo $A
hello
[caozx26@caozx26 ~]$ export A
[caozx26@caozx26 ~]$ env|grep ^A
A=hello
[caozx26@caozx26 ~]$ B=22
[caozx26@caozx26 ~]$ psPID TTY TIME CMD3082 pts/0 00:00:00 bash3162 pts/0 00:00:00 ps
[caozx26@caozx26 ~]$ echo $B
22
[caozx26@caozx26 ~]$ /bin/bash
[caozx26@caozx26 ~]$ echo $B[caozx26@caozx26 ~]$ exit
exit
[caozx26@caozx26 ~]$ echo $B
22
[caozx26@caozx26 ~]$ /bin/bash
[caozx26@caozx26 ~]$ echo $A
hello
[caozx26@caozx26 ~]$ echo $B[caozx26@caozx26 ~]$ exit
exit
[caozx26@caozx26 ~]$
全局变量
[caozx26@caozx26 ~]$ cat /etc/profile
# /etc/profile# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.pathmunge () {case ":${PATH}:" in*:"$1":*);;*)if [ "$2" = "after" ] ; thenPATH=$PATH:$1elsePATH=$1:$PATHfiesac
}if [ -x /usr/bin/id ]; thenif [ -z "$EUID" ]; then# ksh workaroundEUID=`/usr/bin/id -u`UID=`/usr/bin/id -ru`fiUSER="`/usr/bin/id -un`"LOGNAME=$USERMAIL="/var/spool/mail/$USER"
fi# Path manipulation
if [ "$EUID" = "0" ]; thenpathmunge /usr/sbinpathmunge /usr/local/sbin
elsepathmunge /usr/local/sbin afterpathmunge /usr/sbin after
fiHOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; thenexport HISTCONTROL=ignoreboth
elseexport HISTCONTROL=ignoredups
fiexport PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; thenumask 002
elseumask 022
fifor i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; doif [ -r "$i" ]; thenif [ "${-#*i}" != "$-" ]; then . "$i"else. "$i" >/dev/nullfifi
doneunset i
unset -f pathmungeif [ -n "${BASH_VERSION-}" ] ; thenif [ -f /etc/bashrc ] ; then# Bash login shells run only /etc/profile# Bash non-login shells run only /etc/bashrc# Check for double sourcing is done in /etc/bashrc.. /etc/bashrcfi
fi
[caozx26@caozx26 ~]$ cat /etc/bashrc
# /etc/bashrc# System wide functions and aliases
# Environment stuff goes in /etc/profile# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.# Prevent doublesourcing
if [ -z "$BASHRCSOURCED" ]; thenBASHRCSOURCED="Y"# are we an interactive shell?if [ "$PS1" ]; thenif [ -z "$PROMPT_COMMAND" ]; thencase $TERM inxterm*|vte*)if [ -e /etc/sysconfig/bash-prompt-xterm ]; thenPROMPT_COMMAND=/etc/sysconfig/bash-prompt-xtermelif [ "${VTE_VERSION:-0}" -ge 3405 ]; thenPROMPT_COMMAND="__vte_prompt_command"elsePROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'fi;;screen*)if [ -e /etc/sysconfig/bash-prompt-screen ]; thenPROMPT_COMMAND=/etc/sysconfig/bash-prompt-screenelsePROMPT_COMMAND='printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'fi;;*)[ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default;;esacfi# Turn on parallel historyshopt -s histappendhistory -a# Turn on checkwinsizeshopt -s checkwinsize[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "# You might want to have e.g. tty in prompt (e.g. more virtual machines)# and console windows# If you want to do so, just add e.g.# if [ "$PS1" ]; then# PS1="[\u@\h:\l \W]\\$ "# fi# to your custom modification shell script in /etc/profile.d/ directoryfiif ! shopt -q login_shell ; then # We're not a login shell# Need to redefine pathmunge, it gets undefined at the end of /etc/profilepathmunge () {case ":${PATH}:" in*:"$1":*);;*)if [ "$2" = "after" ] ; thenPATH=$PATH:$1elsePATH=$1:$PATHfiesac}# By default, we want umask to get set. This sets it for non-login shell.# Current threshold for system reserved uid/gids is 200# You could check uidgid reservation validity in# /usr/share/doc/setup-*/uidgid fileif [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; thenumask 002elseumask 022fiSHELL=/bin/bash# Only display echos from profile.d scripts if we are no login shell# and interactive - otherwise just process them to set envvarsfor i in /etc/profile.d/*.sh; doif [ -r "$i" ]; thenif [ "$PS1" ]; then. "$i"else. "$i" >/dev/nullfifidoneunset iunset -f pathmungefifi
# vim:ts=4:sw=4
内置变量
$? $$ !!! !!!
[caozx26@caozx26 ~]$ /bin/bash
[caozx26@caozx26 ~]$ ls
公共 模板 视频 图片 文档 下载 音乐 桌面
[caozx26@caozx26 ~]$ echo $?
0
[caozx26@caozx26 ~]$ $$
bash: 3518: 未找到命令...
[caozx26@caozx26 ~]$ echo $$
3518
[caozx26@caozx26 ~]$ psPID TTY TIME CMD3478 pts/0 00:00:00 bash3518 pts/0 00:00:00 bash3586 pts/0 00:00:00 ps
[caozx26@caozx26 ~]$ kill -9 $$
已杀死
[caozx26@caozx26 ~]$ $!
[caozx26@caozx26 ~]$ sleep 200&
[1] 3615
[caozx26@caozx26 ~]$ echo $!
3615
[caozx26@caozx26 ~]$ psPID TTY TIME CMD3478 pts/0 00:00:00 bash3615 pts/0 00:00:00 sleep3628 pts/0 00:00:00 ps
[caozx26@caozx26 ~]$ ls -l
总用量 0
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 公共
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 模板
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 视频
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 图片
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 文档
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 下载
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 音乐
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 桌面
[caozx26@caozx26 ~]$ echo !$
echo -l
-l
[caozx26@caozx26 ~]$ !!
echo -l
-l
[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat 1.sh
read -p ""$# is:"" $#
echo "ok"
[caozx26@caozx26 ~]$ chmod +x 1.sh
$* $@ $#
[caozx26@caozx26 ~]$ ./1.sh asd sad dd das sadd as
6
asd sad dd das sadd as
asd sad dd das sadd as
ok
[caozx26@caozx26 ~]$
$0 $1 $2 $3
[caozx26@caozx26 ~]$ chmod +x 2.sh
[caozx26@caozx26 ~]$ ./2.sh sad dsad sda dasd
./2.sh
sad
dsad
sda
[caozx26@caozx26 ~]$
定义规则
[caozx26@caozx26 ~]$ ?a=s
bash: ?a=s: 未找到命令...
[caozx26@caozx26 ~]$ "?a"=s
bash: ?a=s: 未找到命令...
[caozx26@caozx26 ~]$ "213a"=dsa
bash: 213a=dsa: 未找到命令...
[caozx26@caozx26 ~]$ D=" abc"
[caozx26@caozx26 ~]$ D= AS
bash: AS: 未找到命令...
相似命令是: 'as'
[caozx26@caozx26 ~]$ DA= SD
bash: SD: 未找到命令...
[caozx26@caozx26 ~]$ DA=" SDD"
[caozx26@caozx26 ~]$ DA="?SA"
[caozx26@caozx26 ~]$ DA=?21
[caozx26@caozx26 ~]$
[caozx26@caozx26 ~]$ "123"=A
bash: 123=A: 未找到命令...
[caozx26@caozx26 ~]$ A=date
[caozx26@caozx26 ~]$ a=date
[caozx26@caozx26 ~]$ a=`date`
[caozx26@caozx26 ~]$ echo $a
2025年 09月 26日 星期五 06:31:53 CST
[caozx26@caozx26 ~]$ a=date
[caozx26@caozx26 ~]$ echo $a
date
[caozx26@caozx26 ~]$ a=$(date)
[caozx26@caozx26 ~]$ echo $a
2025年 09月 26日 星期五 06:32:09 CST
[caozx26@caozx26 ~]$
交互式定义
[caozx26@caozx26 ~]$ read -t 3 -p "input " name
input 213123[caozx26@caozx26 ~]$ echo $name[caozx26@caozx26 ~]$ read -t -p "input:" name
bash: read: -p: 无效的超时声明
[caozx26@caozx26 ~]$ read -t 3 -p "input:" name
input:12321312
[caozx26@caozx26 ~]$ echo $name
12321312
[caozx26@caozx26 ~]$ echo -s -p "input:" pass
-s -p input: pass
[caozx26@caozx26 ~]$ echo -s -p "input:" pass
-s -p input: pass
[caozx26@caozx26 ~]$ read -s -p "input:" pass
input:[caozx26@caozx26 ~]$ echo $pass
213
[caozx26@caozx26 ~]$ echo hell | A
bash: A: 未找到命令...
[caozx26@caozx26 ~]$ echo hell | read A
[caozx26@caozx26 ~]$ echo $a
2025年 09月 26日 星期五 06:32:09 CST
[caozx26@caozx26 ~]$ echo $A
date
[caozx26@caozx26 ~]$ read A B
hello sss
[caozx26@caozx26 ~]$ echo $A
hello
[caozx26@caozx26 ~]$ echo $B
sss
[caozx26@caozx26 ~]$ vim 1.txt
[caozx26@caozx26 ~]$ cat 1.txt
ss 123[caozx26@caozx26 ~]$ read user pass <1.txt
[caozx26@caozx26 ~]$ echo $user
ss
[caozx26@caozx26 ~]$ echo $pass
123
[caozx26@caozx26 ~]$ vim 2.txt
[caozx26@caozx26 ~]$ read us pass<2.txt
[caozx26@caozx26 ~]$ echo $us
dasd,123
[caozx26@caozx26 ~]$ echo $pass[caozx26@caozx26 ~]$
dirname basename
[caozx26@caozx26 ~]$ pwd
/home/caozx26
[caozx26@caozx26 ~]$ ls
1.sh 1.txt 2.sh 2.txt 公共 模板 视频 图片 文档 下载 音乐 桌面
[caozx26@caozx26 ~]$ c=/home/caozx26/1.sh
[caozx26@caozx26 ~]$ direname $c
bash: direname: 未找到命令...
[caozx26@caozx26 ~]$ dirname $c
/home/caozx26
[caozx26@caozx26 ~]$ basename $c
1.sh
[caozx26@caozx26 ~]$
数组
普通数组
一次赋值1个变量
[caozx26@caozx26 ~]$ array[0]=sa
[caozx26@caozx26 ~]$ array[1]=sd
[caozx26@caozx26 ~]$ echo $[array[*]]
bash: array[*]: 数组下标不正确
0
[caozx26@caozx26 ~]$ echo ${array[*]}
sa sd
[caozx26@caozx26 ~]$ echo ${array[1]}
sd
一次赋值多个变量
[caozx26@caozx26 ~]$ array1=(na,ma,da)
[caozx26@caozx26 ~]$ echo ${array1[0]}
na,ma,da
[caozx26@caozx26 ~]$ declare -r
declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath"
declare -ir BASHPID
declare -ar BASH_VERSINFO=([0]="4" [1]="4" [2]="19" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
declare -ir EUID="1000"
declare -ir PPID="3473"
declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
declare -ir UID="1000"
[caozx26@caozx26 ~]$ echo ${array[*]:1:1}
sd
[caozx26@caozx26 ~]$ echo ${array1[*]:1:1}[caozx26@caozx26 ~]$ echo ${array1[*]:0:1}
na,ma,da
[caozx26@caozx26 ~]$ array2=(ss ssa sdsad asd)
[caozx26@caozx26 ~]$ echo ${array2[*]:2:1}
sdsad
[caozx26@caozx26 ~]$ echo ${!array2[*]}
0 1 2 3
[caozx26@caozx26 ~]$ echo ${#array2[*]}
4
[caozx26@caozx26 ~]$ array4=(`ls -l`)
[caozx26@caozx26 ~]$ echo array4
array4
[caozx26@caozx26 ~]$ echo $array4
总用量
[caozx26@caozx26 ~]$ ls -l
总用量 8
-rwxrwxr-x. 1 caozx26 caozx26 34 9月 26 06:24 1.sh
-rwxrwxr-x. 1 caozx26 caozx26 32 9月 26 06:28 2.sh
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 公共
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 模板
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 视频
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 图片
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 文档
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 下载
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 音乐
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 桌面
[caozx26@caozx26 ~]$ echo ${array4[@]}
总用量 8 -rwxrwxr-x. 1 caozx26 caozx26 34 9月 26 06:24 1.sh -rwxrwxr-x. 1 caozx26 caozx26 32 9月 26 06:28 2.sh drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 公共 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 模板 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 视频 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 图片 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 文档 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 下载 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 音乐 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 桌面
[caozx26@caozx26 ~]$ echo ${array4[1]}
8
[caozx26@caozx26 ~]$ array[6]=(12 23121 213 123 "hello" [21]=ff)
bash: array[6]: 无法将链表赋值给数组成员
[caozx26@caozx26 ~]$ array6=(12 23121 213 123 "hello" [21]=ff)
[caozx26@caozx26 ~]$ echo $array6
12
[caozx26@caozx26 ~]$ echo ${array6[@]}
12 23121 213 123 hello ff
[caozx26@caozx26 ~]$
关联数组
一次赋单个值
[caozx26@caozx26 ~]$ declare -A a_array
[caozx26@caozx26 ~]$ declare -A books_array
[caozx26@caozx26 ~]$ declare -A books_ar
[caozx26@caozx26 ~]$ boos_ar[linux]=2
[caozx26@caozx26 ~]$ books_ar[linux]=2
[caozx26@caozx26 ~]$ books_ar[math]=3
[caozx26@caozx26 ~]$ echo ${books_ar[*]}
3 2
[caozx26@caozx26 ~]$ echo ${books_ar[*]}
3 2
[caozx26@caozx26 ~]$ echo ${books_ar[linux]}
2
[caozx26@caozx26 ~]$ echo ${#books_ar[*]}
2
[caozx26@caozx26 ~]$ echo ${!books_ar[*]}
math linux
[caozx26@caozx26 ~]$
一次赋多个值
[caozx26@caozx26 ~]$ names_ar=([name1]=js [n2]=ts [n]=ok)
[caozx26@caozx26 ~]$ echo ${names_ar[*]}
ok
[caozx26@caozx26 ~]$ echo ${names_ar[@]}
ok
[caozx26@caozx26 ~]$ echo ${!names_ar[@]}
0
[caozx26@caozx26 ~]$ declare -A names
[caozx26@caozx26 ~]$ names=([na1]=ts [n2]=js [n3]=oko)
[caozx26@caozx26 ~]$ echo ${names[@]}
js oko ts
[caozx26@caozx26 ~]$ echo ${!names[@]}
n2 n3 na1
[caozx26@caozx26 ~]$ echo ${#names[@]}
3
[caozx26@caozx26 ~]$
记录
[caozx26@caozx26 ~]$ /bin/bash
[caozx26@caozx26 ~]$ ls
公共 模板 视频 图片 文档 下载 音乐 桌面
[caozx26@caozx26 ~]$ echo $?
0
[caozx26@caozx26 ~]$ $$
bash: 3518: 未找到命令...
[caozx26@caozx26 ~]$ echo $$
3518
[caozx26@caozx26 ~]$ psPID TTY TIME CMD3478 pts/0 00:00:00 bash3518 pts/0 00:00:00 bash3586 pts/0 00:00:00 ps
[caozx26@caozx26 ~]$ kill -9 $$
已杀死
[caozx26@caozx26 ~]$ $!
[caozx26@caozx26 ~]$ sleep 200&
[1] 3615
[caozx26@caozx26 ~]$ echo $!
3615
[caozx26@caozx26 ~]$ psPID TTY TIME CMD3478 pts/0 00:00:00 bash3615 pts/0 00:00:00 sleep3628 pts/0 00:00:00 ps
[caozx26@caozx26 ~]$ ls -l
总用量 0
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 公共
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 模板
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 视频
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 图片
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 文档
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 下载
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 音乐
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 桌面
[caozx26@caozx26 ~]$ echo !$
echo -l
-l
[caozx26@caozx26 ~]$ !!
echo -l
-l
[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat 1.sh
read -p ""$# is:"" $#
echo "ok"
[caozx26@caozx26 ~]$ chmod +x 1.sh
[caozx26@caozx26 ~]$ ./1.sh 2 12 2
./1.sh: 第 1 行:read: `is:': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat 1.sh
read -p ""$#" is:" $#
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh 21 21 21
./1.sh: 第 1 行:read: `3': 不是有效的标识符
ok
[1]+ 已完成 sleep 200
[caozx26@caozx26 ~]$ echo $*[caozx26@caozx26 ~]$ $@
[caozx26@caozx26 ~]$ echo $@[caozx26@caozx26 ~]$ ./1.sh 213 23 32 213
./1.sh: 第 1 行:read: `4': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat 1.sh
read -p ""\$#" is:" $#
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh
./1.sh: 第 1 行:read: `0': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat 1.sh
read -p ""\$#" is:" $#
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh 231 2312 23
./1.sh: 第 1 行:read: `3': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ ./1.sh 213 213 213
./1.sh: 第 1 行:read: `3': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ echo $*[caozx26@caozx26 ~]$ cat 1.sh
read -p ""\$#" is:" $#
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh 213 23 213 2132
./1.sh: 第 1 行:read: `4': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ ./1.sh s da dsa
./1.sh: 第 1 行:read: `3': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat 1.sh
read -p "\$# is:" $#
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh sd asd asd
./1.sh: 第 1 行:read: `3': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat 1.sh
read -p "$# is:" input
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh
0 is:we
ok
[caozx26@caozx26 ~]$ ./1.sh 213 213 213
3 is:^C[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat 1.sh
echo $#
echo $*
echo $@
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh asd sad f sssda d
5
asd sad f sssda d
asd sad f sssda d
ok
[caozx26@caozx26 ~]$ ./1.sh asd sad dd das sadd as
6
asd sad dd das sadd as
asd sad dd das sadd as
ok
[caozx26@caozx26 ~]$ vim 2.sh
[caozx26@caozx26 ~]$ cat 2.sh
echo $0
echo $1
echo $2
echo $3
[caozx26@caozx26 ~]$ chmod +x 2.sh
[caozx26@caozx26 ~]$ ./2.sh sad dsad sda dasd
./2.sh
sad
dsad
sda
[caozx26@caozx26 ~]$ ?a=s
bash: ?a=s: 未找到命令...
[caozx26@caozx26 ~]$ "?a"=s
bash: ?a=s: 未找到命令...
[caozx26@caozx26 ~]$ "213a"=dsa
bash: 213a=dsa: 未找到命令...
[caozx26@caozx26 ~]$ D=" abc"
[caozx26@caozx26 ~]$ D= AS
bash: AS: 未找到命令...
相似命令是: 'as'
[caozx26@caozx26 ~]$ DA= SD
bash: SD: 未找到命令...
[caozx26@caozx26 ~]$ DA=" SDD"
[caozx26@caozx26 ~]$ DA="?SA"
[caozx26@caozx26 ~]$ DA=?21
[caozx26@caozx26 ~]$ "123"=A
bash: 123=A: 未找到命令...
[caozx26@caozx26 ~]$ A=date
[caozx26@caozx26 ~]$ a=date
[caozx26@caozx26 ~]$ a=`date`
[caozx26@caozx26 ~]$ echo $a
2025年 09月 26日 星期五 06:31:53 CST
[caozx26@caozx26 ~]$ a=date
[caozx26@caozx26 ~]$ echo $a
date
[caozx26@caozx26 ~]$ a=$(date)
[caozx26@caozx26 ~]$ echo $a
2025年 09月 26日 星期五 06:32:09 CST
[caozx26@caozx26 ~]$ array[0]=sa
[caozx26@caozx26 ~]$ array[1]=sd
[caozx26@caozx26 ~]$ echo $[array[*]]
bash: array[*]: 数组下标不正确
0
[caozx26@caozx26 ~]$ echo ${array[*]}
sa sd
[caozx26@caozx26 ~]$ echo ${array[1]}
sd
[caozx26@caozx26 ~]$ array1=(na,ma,da)
[caozx26@caozx26 ~]$ echo ${array1[0]}
na,ma,da
[caozx26@caozx26 ~]$ declare -r
declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath"
declare -ir BASHPID
declare -ar BASH_VERSINFO=([0]="4" [1]="4" [2]="19" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
declare -ir EUID="1000"
declare -ir PPID="3473"
declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
declare -ir UID="1000"
[caozx26@caozx26 ~]$ echo ${array[*]:1:1}
sd
[caozx26@caozx26 ~]$ echo ${array1[*]:1:1}[caozx26@caozx26 ~]$ echo ${array1[*]:0:1}
na,ma,da
[caozx26@caozx26 ~]$ array2=(ss ssa sdsad asd)
[caozx26@caozx26 ~]$ echo ${array2[*]:2:1}
sdsad
[caozx26@caozx26 ~]$ echo ${!array2[*]}
0 1 2 3
[caozx26@caozx26 ~]$ echo ${#array2[*]}
4
[caozx26@caozx26 ~]$ array4=(`ls -l`)
[caozx26@caozx26 ~]$ echo array4
array4
[caozx26@caozx26 ~]$ echo $array4
总用量
[caozx26@caozx26 ~]$ ls -l
总用量 8
-rwxrwxr-x. 1 caozx26 caozx26 34 9月 26 06:24 1.sh
-rwxrwxr-x. 1 caozx26 caozx26 32 9月 26 06:28 2.sh
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 公共
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 模板
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 视频
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 图片
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 文档
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 下载
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 音乐
drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 桌面
[caozx26@caozx26 ~]$ echo ${array4[@]}
总用量 8 -rwxrwxr-x. 1 caozx26 caozx26 34 9月 26 06:24 1.sh -rwxrwxr-x. 1 caozx26 caozx26 32 9月 26 06:28 2.sh drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 公共 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 模板 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 视频 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 图片 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 文档 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 下载 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 音乐 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 桌面
[caozx26@caozx26 ~]$ echo ${array4[1]}
8
[caozx26@caozx26 ~]$ array[6]=(12 23121 213 123 "hello" [21]=ff)
bash: array[6]: 无法将链表赋值给数组成员
[caozx26@caozx26 ~]$ array6=(12 23121 213 123 "hello" [21]=ff)
[caozx26@caozx26 ~]$ echo $array6
12
[caozx26@caozx26 ~]$ echo ${array6[@]}
12 23121 213 123 hello ff
[caozx26@caozx26 ~]$ declare -A a_array
[caozx26@caozx26 ~]$ declare -A books_array
[caozx26@caozx26 ~]$ declare -A books_ar
[caozx26@caozx26 ~]$ boos_ar[linux]=2
[caozx26@caozx26 ~]$ books_ar[linux]=2
[caozx26@caozx26 ~]$ books_ar[math]=3
[caozx26@caozx26 ~]$ echo ${books_ar[*]}
3 2
[caozx26@caozx26 ~]$ echo ${books_ar[*]}
3 2
[caozx26@caozx26 ~]$ echo ${books_ar[linux]}
2
[caozx26@caozx26 ~]$ echo ${#books_ar[*]}
2
[caozx26@caozx26 ~]$ echo ${!books_ar[*]}
math linux
[caozx26@caozx26 ~]$ names_ar=([name1]=js [n2]=ts [n]=ok)
[caozx26@caozx26 ~]$ echo ${names_ar[*]}
ok
[caozx26@caozx26 ~]$ echo ${names_ar[@]}
ok
[caozx26@caozx26 ~]$ echo ${!names_ar[@]}
0
[caozx26@caozx26 ~]$ declare -A names
[caozx26@caozx26 ~]$ names=([na1]=ts [n2]=js [n3]=oko)
[caozx26@caozx26 ~]$ echo ${names[@]}
js oko ts
[caozx26@caozx26 ~]$ echo ${!names[@]}
n2 n3 na1
[caozx26@caozx26 ~]$ echo ${#names[@]}
3
[caozx26@caozx26 ~]$ read -t 3 -p "input " name
input 213123[caozx26@caozx26 ~]$ echo $name[caozx26@caozx26 ~]$ read -t -p "input:" name
bash: read: -p: 无效的超时声明
[caozx26@caozx26 ~]$ read -t 3 -p "input:" name
input:12321312
[caozx26@caozx26 ~]$ echo $name
12321312
[caozx26@caozx26 ~]$ echo -s -p "input:" pass
-s -p input: pass
[caozx26@caozx26 ~]$ echo -s -p "input:" pass
-s -p input: pass
[caozx26@caozx26 ~]$ read -s -p "input:" pass
input:[caozx26@caozx26 ~]$ echo $pass
213
[caozx26@caozx26 ~]$ echo hell | A
bash: A: 未找到命令...
[caozx26@caozx26 ~]$ echo hell | read A
[caozx26@caozx26 ~]$ echo $a
2025年 09月 26日 星期五 06:32:09 CST
[caozx26@caozx26 ~]$ echo $A
date
[caozx26@caozx26 ~]$ read A B
hello sss
[caozx26@caozx26 ~]$ echo $A
hello
[caozx26@caozx26 ~]$ echo $B
sss
[caozx26@caozx26 ~]$ vim 1.txt
[caozx26@caozx26 ~]$ cat 1.txt
ss 123[caozx26@caozx26 ~]$ read user pass <1.txt
[caozx26@caozx26 ~]$ echo $user
ss
[caozx26@caozx26 ~]$ echo $pass
123
[caozx26@caozx26 ~]$ vim 2.txt
[caozx26@caozx26 ~]$ read us pass<2.txt
[caozx26@caozx26 ~]$ echo $us
dasd,123
[caozx26@caozx26 ~]$ echo $pass[caozx26@caozx26 ~]$ pwd
/home/caozx26
[caozx26@caozx26 ~]$ ls
1.sh 1.txt 2.sh 2.txt 公共 模板 视频 图片 文档 下载 音乐 桌面
[caozx26@caozx26 ~]$ c=/home/caozx26/1.sh
[caozx26@caozx26 ~]$ direname $c
bash: direname: 未找到命令...
[caozx26@caozx26 ~]$ dirname $c
/home/caozx26
[caozx26@caozx26 ~]$ basename $c
1.sh
[caozx26@caozx26 ~]$